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);
		}
	}
}
posted @ 2021-08-24 14:05  tensor_zhang  阅读(163)  评论(0编辑  收藏  举报