Java基础之方法
方法
前言
1.程序开始执行的时候先从main方法开始
2.Java语言中所有的方法体的代码都要遵守从上到下执行
3.mian方法程序会自动调用,而main以外的方法需要程序员自己调用。
4.main以外的方法只有被调用的时候才会执行
什么是方法?为什么使用方法?
方法是一个可以重复使用的代码段。而如果某段代码在很多个地方都有使用时,如果在各个地方都重复编写这段代码,就会比较麻烦,而且修改的时候也不方便,这是就可以将这段代码定义为一个方法,让程序反复调用。
方法定义的语法
public static 返回类型 方法名(数据类型 变量名,数据类型 变量名,......,数据类型 变量名){ 代码块; } 使用方法: 方法名(实参列表)
无参数无返回值
无参数:代表方法名后的()里面没有参数
无返回值:代表方法中返回类型为void
语法:
public static void 方法名 (){ 代码 }
举个例子:
需求是实现下面图片的效果:
思路:
①编写一个无参无返回值方法:用来打印一行*
②编写一个无参无返回值方法:用来打印一行字符串"How do you do!"
代码实现:
1 public class Test { 2 public static void main(String[] args) { 3 4 //根据图片中的效果,进行调用方法 5 print(); 6 print1(); 7 print(); 8 print(); 9 print1(); 10 print(); 11 } 12 //无参无返回值方法实现打印一行* 13 public static void print(){ 14 System.out.println("*******************"); 15 } 16 //无参无返回值方法实现打印一个字符串(How do you do!) 17 public static void print1(){ 18 System.out.println("How do you do!"); 19 } 20 }
效果展示:
有参数无返回值
有参数:代表方法名后面的()需要有参数列表
无返回值:代表方法中返回类型为void
语法:
public static void 方法名(数据类型 变量名,.....,数据类型 变量名){ 代码块; }
举个例子:
需求是实现下面图片的效果:
思路:
注意看这里的如果每一行写一个方法是完全可以实现的,但是你会发现它们之间是有共同点的。
第一行的*,第三行的@,第四行的-,第六行$它们只是改变了变量的内容,它们的数量是完全相同的,所以我们可以传入一个指定的符号,让方法去打印输出这个符号即可。
同理第二行输入的是字符串,第五行输入的同样是一个字符串,我们就可以通过传入一段字符串,让方法去打印这段字符串即可。
代码:
1 public class Test { 2 public static void main(String[] args) { 3 4 //根据图片中的效果,进行调用方法 5 print('*'); 6 print1("Hello world!"); 7 print('@'); 8 print('-'); 9 print1("How do you do!"); 10 print('$'); 11 } 12 //有参数无返回方法(输入字符,打印对应的字符) 13 public static void print(char a){ 14 for (int i = 0; i < 20; i++) { 15 System.out.print(a); 16 } 17 System.out.println(); 18 } 19 //有参数无返回方法(输入字符串,打印对应的字符串内容) 20 public static void print1(String a){ 21 System.out.println(a); 22 } 23 }
效果展示:
无参数有返回值
无参数:代表方法名后的()里面没有参数
有返回值:返回类型需要根据返回值类型的不同而改变
语法:
public static 返回类型 方法名(){ 代码; }
举个例子:
需求:方法内随机生成一个整数,在主方法中调用方法并打印整数值
思路:
①方法内生成一个随机数,需要用到Random类去生成一个整数,而方法的返回值为整型,所以返回类型为int
②在main方法中调用此方法并打印此方法返回的数值
代码:
1 import java.util.Random; 2 3 public class Test { 4 public static void main(String[] args) { 5 6 //由于有返回值,所以需要通过一个整型变量来接受返回值 7 int i = randomInt(); 8 //打印变量 9 System.out.println("随机数:"+i); 10 } 11 //无参数有返回方法(方法内随机生成一个整数) 12 public static int randomInt(){ 13 Random random = new Random(); 14 int i = random.nextInt(5); 15 return i; 16 } 17 }
效果展示:
有参数有返回值
有参数:代表方法名后的()里面有参数列表
有返回值:返回类型需要根据返回值类型的不同而改变
语法:
public static 返回类型 方法名(数据类型 变量名,......,数据类型 变量名){ 代码; }
举个例子:
求整型m~n的和,并把结果返回。
思路:
①确定方法是否需要返回值?需要因为需求中说要将结果返回
②确定方法是否要传入参数?需要因为需求中说要求出整型的m~n的和,m是一个变量,n也是一个变量,都需要用户传入才能知道具体的数据值
③判断返回值类型?整型的数据之和仍为整型,所以返回值int类型
代码:
1 public class Test { 2 public static void main(String[] args) { 3 4 //由于有返回值,所以需要通过一个整型变量来接受返回值 5 int sum = sum(5,10); 6 System.out.println("求5~10的整数和:" + sum); 7 } 8 //无参数有返回方法(方法内随机生成一个整数) 9 public static int sum(int m,int n){ 10 //定义一个求和的变量,并初始化 11 int sum=0; 12 //这里默认m为小的n为大的 13 for (int i = m; i <=n ; i++) { 14 sum+=i; 15 } 16 return sum; 17 } 18 }
效果展示:
方法重载
方法名相同,方法的参数类型不同,参数数量不同这种情况称为方法的重载,方法重写的好处是可以简化新建一个新的方法名来实现方法。
当程序调用方法时,会根据方法中参数类型,数量的不同,从而调用不同的方法。
举个例子:
需求是实现两个数的和,并返回值。
思路:
注意一点传入两个数,并不知道这两个数是什么数据类型的。
所以需要通过不同的数据类型来调用不同的方法。
这里就需要用到方法的重载。
代码:
1 public class Demo { 2 public static void main(String[] args) { 3 /* 4 这里就是使用方法的重载 5 相同的方法名,但是方法中形参列表的数据类型不同,这就是重载 6 */ 7 System.out.println(sum(1, 2)); 8 System.out.println(sum(1.8, 2)); 9 System.out.println(sum(1.2, 1.5)); 10 System.out.println(sum(3, 2.3)); 11 12 } 13 //假设传入的是两个整型的数 14 public static int sum(int a,int b){ 15 int sum=a+b; 16 return sum; 17 } 18 //假设传入的是两个浮点数 19 public static double sum(double a,double b){ 20 double sum=a+b; 21 return sum; 22 } 23 //假设传入的第一个数为浮点数,另一个为整数 24 public static double sum(double a,int b){ 25 double sum=a+b; 26 return sum; 27 } 28 //假设传入的第一个数为整数,另一个为浮点数 29 public static double sum(int a,double b){ 30 double sum=a+b; 31 return sum; 32 } 33 }
效果展示:
可变参数的方法
调用方法时可以根据需要传递若干个参数,但参数类型要一致
语法:
public static 返回类型 方法名(数据类型 ... 变量名){
代码;
}
举个例子:
1 import java.util.Arrays; 2 3 public class Test02 { 4 public static void main(String[] args) { 5 fun(1); 6 fun(1,4); 7 fun(1,4,5); 8 fun(1,3,5,6); 9 } 10 //注意 ...不能多也不能少 11 public static void fun(int ...a){//a代表的是一个数组,用来存储传入的数据 12 System.out.println(Arrays.toString(a)); 13 } 14 }
效果展示: