java4-方法的定义、调用和重载,main方法,可变参数
1,方法的声明和调用语句
//声明
[修饰符1,修饰符2,...] 返回值类型 方法名(形参类型1 形参1,形参类型2 形参2,...){
方法体;
return 返回值; //无return,返回值类型为void
}
//调用
对象名.方法名(实参列表)
注意
- 方法与方法是并列的关系,所以定义的方法不能写到main方法中
//一个例子
public class Test01{
public static int add(int num1, int num2){
int sum = 0;
sum += num1;
sum += num2;
return sum;
}
public static void main(String[] args){
int num1 = 10;
int num2 = 20;
System.out.println(Test01.add(num1, num2));
}
}
//猜数字游戏,真他妈经典
import java.util.Scanner;
public class Test02{
public static boolean compare(int target, int guess){
if(guess==target){
System.out.println("你猜对了!");
return true;
}else if(guess<target){
System.out.println("你猜小了~");
return false;
}else {
System.out.println("你猜大了~");
return false;
}
}
public static void main(String[] args){
int target = (int)(Math.random()*10)+1; //随机数的用法
Scanner sc = new Scanner(System.in);
boolean flag;
do{
System.out.print("请输入猜测的数:");
int guess = sc.nextInt();
flag = Test02.compare(target, guess);
}while(!flag);
}
}
2,方法的重载
- 方法签名:方法名+依次参数类型,方法名是一个方法在一个类中的唯一标识,同一个类中方法可以重名,但是签名不可以重复。注意:方法的返回值不是方法签名的一部分。
- 方法的重载指同一个类中可以定义多个方法名相同,但参数不同的方法(名字相同、签名不同)。在调用时,会根据不同的参数自动匹配对应的方法。
- 本质:重载的方法实际是完全不同的方法,只是名称相同而已。
- 方法调用的时候,实参和形参不必完全类型一样,对于数字类型的参数,实参可以自动类型转换为形参类型即可;那如果实参可以自动类型转换为多个重载函数的形参,那么会调用哪个重载方法呢?会根据byte-short-int-long-float-double的顺序,就近匹配。
- 方法重载的条件:形参类型、形参个数、形参顺序不同(不同类型的形参顺序不同)
- 注意:
-
只有返回值类型不同不构成方法重载
int a(String[] args){} 与 void a(String[] args){} 不构成重载
-
只有形参名称不同不构成方法重载
int a(String str){} 与 int a(String s){} 不构成重载
-
- 注意:
- 例子
public class Test03{
public static int add(int num1, int num2){
System.out.println("调用add1");
return num1+num2;
}
public static int add(int num1, int num2, int num3){
System.out.println("调用add2");
return num1+num2+num3;
}
public static void main(String[] args){
int sum = Test03.add(10, 20);
System.out.println(sum);
sum = Test03.add(10, 20, 30);
System.out.println(sum);
}
}
public class Test04{
public static void main(String[] args){
int num = 10;
Test04.add(num); //级别:byte、short、char-》int-》long-》float-》double
}
/*
public static void add(int num){
System.out.println("---------1");
}
*/
public static void add(long num){
System.out.println("---------2");
}
public static void add(float num){
System.out.println("---------3");
}
public static void add(double num){
System.out.println("---------4");
}
}
3,main方法
- 程序的入口
- 格式
public static void main(String[] args){ }
- 允许重载,例如
public static void main(String[] args){ } public static void main(String args){ }
- main的实参是什么?
//默认 new String[0] //非默认 java 类 aa bb cc dd "e e " " 1 2 3 " 实参为[aa, bb, cc, dd, e e , 1 2 3 ]
import java.util.Arrays; public class test{ public static void main(String[] args){ int[] arr = new int[0]; System.out.println(arr.length); //0 arr = null; //System.out.println(arr.length); //java.lang.NullPointerException,空指针异常 System.out.println(Arrays.toString(arr)); //null System.out.println(args.length); //0 System.out.println(Arrays.toString(args)); //[] } }
4,可变参数
[修饰符1,修饰符2,...] 返回值类型 方法名(形参类型1...形参1)
//在jdk1.5之后引入的新特性,方法在使用时参数的个数是可变的,解决了部分方法的重载问题
//方法内部对可变参数的使用与数组一样
//可变参数与其他数据一起作为形参时,可变参数要放在最后
public class Test07{
public static void main(String[] args){
Test07.method01(10);
Test07.method01();
Test07.method01(10,20,30);
Test07.method01(new int[]{10, 20, 30, 40, 50});
}
public static void method01(int...nums){
System.out.println("----------1");
for(int num:nums){
System.out.println(num);
}
}
}
行动是治愈恐惧的良药,而犹豫拖延将不断滋养恐惧。