方法的概述:
1)每种语言中都有方法的概念,只不过每个语言中的叫法不一样。
java中叫方法,c++/c中叫函数,VB中叫过程
2)方法是用于封装一段特定的业务逻辑的
3)方法要尽可能地独立,一个方法就干一件事
4)方法可以被反复调用(使用)
5)方法的出现减少了代码重复,有利于代码的维护及代码的复用性
方法的定义:
方法的定义有五要素:
1)访问权限修饰符:
1.1)public:公开的,可以在任何类中使用
1.2)private:私有的,只能在本类中使用
1.3)protected:受保护的,只能在本类,子类,同包类中使用
1.4)x默认的:什么也不写,可以在本类,同包类中使用
1.5)类的访问修饰符是public,默认的,两种
1.6)类中成员(方法)的访问修饰符以上四种都可以使用
2)返回值类型:
2.1)方法可以有返回值也可以无返回值
2.2)若无返回值则返回值类型写成void
2.3)若有返回值则返回值类型写成特定的数据类型(String,数组或基本数据类型都可)
2.4)何时有返回值,何时无返回值?
若需要用到方法中的最终数据结果和业务逻辑-----------------有返回值
举例:
我要和你借十块钱,我肯定需要你的回复呀,你的回复就是返回值。
若不需要用到方法中的最终数据结果,只用业务逻辑--------无返回值
举例:
我要揍你一顿,我需要和你商量什么时候揍你,或者说获得你的同意么?不需要!就相当于方法不需要返回值。
3)方法名,命名要见名知意,要使用小驼峰命名法(多单词组成时第一个单词首字母小写,其余单词首字母大写)
4)参数
4.1)方法可以有参数也可以无参数,但是有参数会使方法更加灵活,到底何时有参何时无参需要看具体的业务逻辑。
举例:
random();是java提供的一个生成随机数的无参方法,范围只有0-1之间(不到1),当我们想要生成1-100之间的随机数的时候就需要 random()*100+1 来完成。
假设,random是有参方法,那我们只需要random(1,100);这样就能实现随机1-100之间的数了,这就是有参和无参的灵活性的区别。
但是一定要看清楚我这里是假设的,并不是说random();这个方法可以加形参数。random();这个方法是不能加参数的
5)方法体(具体的业务功能的实现逻辑)
自定义方法:
自定义方法必须是和main方法同级(并列)的不可以写在main方法中
//自定义方法的语法:
访问权限修饰符 static(意为:静态的。可写可不写) 返回值类型 方法名 (参数){
方法体(业务功能的实现逻辑)
}
//代码形式的自定义方法结构:
/*无返回值无参数*/
public static void way(){
/*方法体**/
}
/*无返回值有参数*/
public static void way(String name){
/*方法体*/
}
//返回值是基本类型的:
/*有返回值无参数*/
public static int way(){
int 变量名 = 初始化;
/*方法体*/
return 变量名;
}
/*有返回值有参数*/
public static double way(double deposit){
double 变量名 = 初始化;
/*方法体*/
return 变量名;
}
//返回值是数组类型,String类型的:
/*有返回值无参数*/
public static int[] way(){
int[] 数组名 = new int[元素个数];
/*方法体*/
return 数组名;
}
/*有返回值有参数*/
public static String way(int age){
String 变量名 = 初始化;
/*方法体*/
return 变量名;
}
方法的调用:
方法和方法之间是可以相互调用的,方法也可以在自身方法体中调用自己来实现循环的效果,不过自己调用自己何时使用?得看具体的业务逻辑。
只有在main方法中调用自定义方法,自定义方法才会被执行
//在main方法中如何调用方法如下:
public static void main(String[] args){
//无返回值时: 方法名(有参传参);
/*调用无返回值无参数的way方法*/
way();//大家好!我叫武洋洋今年17岁
/*调用无返回值有参数的way方法*/
way(name);//大家好!我叫武洋洋,今年17岁
//有返回值时: 数据类型(与返回值类型相同) 变量名 = 方法名(有参传参);
//在调用有返回值的方法时,方法的值就是该方法中return后的变量的最终值
/*调用有返回值(int类型)无参数的way方法*/
int age = way();// age = 17
/*调用有返回值(String类型)有参数的way方法*/
String name = way(17);// name = "未成年";
}
//无返回值无参数的way方法
public static void way(){
System.out.println("大家好!我叫武洋洋,今年17岁");
}
//无返回值有参数的way方法
public static void way(String name){
System.out.println("大家好!我叫"+name+",今年17岁");
}
//有返回值无参数的way方法
public static int way(){
int total = 17;
return total;
// return; 编译错误,在有返回值时return后必须跟返回值的变量名
}
//有返回值有参数的way方法
public static boolean way(int age){
String export = null;//初始化一个空值
if(age >= 18){
export = "成年";
}else{
export = "未成年";
}
return export;
// return 123; 编译错误,当有返回值时return后跟的数或变量名的类型必须与返回值类型相同
}
方法调用总结:
1)方法可以调用多次,且若有参数则只能输入数据类型相同的实参。
2)调用方法时,若该方法有参则必须传参。
3)若方法有返回值则方法中必须有一个与返回值类型相同的变量用来存储最终返回值,且必须在该方法的最后用 return 变量名; 去给调用方返回结果。
4)方法之间可以相互调用
在方法中return的作用:
return有两个作用
1)若return所在的方法有返回值时return的作用:返回结果给调用方
用法:return 值; ————用于有返回值的方法中(作用:返回值给调用方)
2)若return所在的方法没有返回值时return的作用:结束方法的执行
用法:return; ————用于无返回值的方法中(作用:提前结束方法)
参数的两种称呼:
1)自定义方法后的参数我们常常称之为形参,形参只有在所属方法被调用时,才会被赋值。
2)在调用方法时输入的参数称之为实参。
方法的练习:
需求:
声明一个整形数组arr,包含任意个元素,每个元素为0-99之间的随机数。
1)定义generate方法,用于生成指定长度的int数组,数组中元素为0到任意范围的随机数,并将数组返回。
2)包含任意个元素就是调用方输入的int类型实参是多少generate方法返回的数组就是多长。
public static void main(String[] args) {
//调用方法生成一组十五个元素且每个元素都是0-任意范围的随机数
int[] arr = generate(15,1000);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
// 自定义一个int数组的方法,第一个参数代表数组长度,第二个参数代表元素随机的最大范围值
public static int[] generate(int Length, int Scope){
int[] arrs = new int[Length];
for(int i=0;i<arrs.length;i++){
arrs[i] = (int)(Math.random()*Scope);
}
return arrs;
}
方法的重载:
如何构成重载:
1)同一个类中,出现1个以上(不包括1)的方法重名时,参数列表,参数类型,参数个数,参数类型的循序不同时,就构成了方法的重载
2)对于多个方法,如果只有返回值不同,那么就不构成重载,程序会报错
3)对于多个方法,如果只有访问修饰符不同,那么就不构成重载,程序会报错
4)对于多个方法,如果只是参数命名不同,那么就不构成重载,程序会报错
重载的作用:
1)不用为了因为参数个数不同,参数类型不同,参数类型顺序不同,有参无参,而构建多个函数(方法),这样在我们调用方法时就不需要去记那么多的函数(方法)名了,而是知道了方法的功能然后传入相应的参数,系统就会准确的知道我们调用的是哪个方法。
重载的实现:
//这里就不写方法体和return了 各位能看出重载就好
public static void way(){
}
public static void way(String name){
}
public static void way(String name, int age){
}
public static void way(String name, double deposit){
}
public static void way(String name, int age, double deposit){
}
public static void way(String name, double deposit, int age){
}
public static void way(int age){
}
public static void way(int age, double deposit){
}
public static void way(int age, String name){
}
public static void way(int age, String name, double deposit){
}
public static void way(int age, double deposit, String name){
}
public static void way(double deposit){
}
public static void way(double deposit, int age){
}
public static void way(double deposit, String name){
}
public static void way(double deposit, int age, String name){
}
public static void way(double deposit, String name, int age){
}
重载的结论:
对于重载:只有有参无参,参数个数不同,参数类型不同,参数类型顺序不同时,才会发生重载