【JavaSE】【面向对象02】类的五大成员之方法

类的成员之二:方法

1.方法的声明

  1. 方法声明的位置
    类中方法外

  2. 方法的声明格式

[权限修饰符]  [修饰符] 返回值类型  方法名([形参列表]){
	//方法体:实现功能的语句
}

2.方法参数的值传递机制

形参是一个方法(栈帧)中的局部变量表中的变量,方法在执行的时候,是通过这些局部变量来做运算的,因此值传递就是指 在调用方法的时候,将实际参数传递给局部变量;
(1)基本数据类型形参:实参给形参传的是 “数据值” ,形参值的修改不会影响实参
(2)引用数据类型形参:实参给形参传的是 “地址值” ,形参对象的属性值修改会影响实参对象的属性值。

public class TestPassValue{
	public static void main(String[] args){
		int a = 10;
		
		System.out.println("修改之前a = " + a);//10
		
		//a是实参
		change(a);
		
		System.out.println("修改之后a = " + a);//10
	}
	
	//方法的功能:修改一个变量的值,为它原来的两倍
	//修饰符:public static,和main在同一个类中,为了在main()中直接调用,这里加上public static 
	//int num是形参
	public static void change(int num){
		System.out.println("修改之前num = " + num);//10
		
		num *=  2;
		
		System.out.println("修改之后num = " + num);//20
	}
}
修改之前a = 10
修改之前num = 10
修改之后num = 20
修改之后a = 10

在这里插入图片描述

3.方法重载(Overload)

方法的重载:在同一个类中,出现的多个方法名称相同,参数列表不同的情形称为方法重载。

(1)在同一个类中多个方法
(2)方法名称必须相同
(3)参数列表必须不同(参数的个数或数据类型不同)
注意:只和方法名和参数列表有关,与其他的都无关

4.命令行参数

命令行参数:给main方法传递的参数
该方法接收一个String类型的数组参数,该数组中保存执行java命令时传递给所运行的类的参数。
在这里插入图片描述

  • main()为什么是public static 的??
1.java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public
2.java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的

传参格式:
java main方法所在类名 参数列表
java TestCommandParam chai lin yan

可变参数

1、如何声明
数据类型… 可变参数名

要求:
(1)一个方法只能有一个可变参数
(2)可变参数的位置一定是最后一个

2、如何使用它
(1)在声明它的方法中,把它当做数组使用
(2)在调用含可变参数的方法
A:非可变参数的部分,实参的类型,个数,顺序与形参仍然要一一对应
B:可变参数的部分,实参的类型要与形参一致或兼容,个数可以是0~n个
C:可变参数的部分,实参还可以是对应类型的数组

public class VarParams{
	public static void main(String[] args){
		System.out.println("3或5的最大值是:" + getMax(3,5));//实参是3和5,  3给了num, 5给了args
		System.out.println("3,5,1,7,9的最大值是:" + getMax(3,5,1,7,9));//3,5,1,7,9是实参,  3给了num,5,1,7,9给了args
		System.out.println("3的最大值是:" + getMax(3));//3是实参, 3给了num,args没有对应的实参
		//System.out.println("3的最大值是:" + getMax());//编译不通过
		
		int[] array = {4,5,6,7};
		System.out.println("3和{4,5,6,7}的最大值是:" + getMax(3,array));//3给了num,array给了args
	}
	
	//方法的功能:可以求1~n个整数中的最大值	
	public static int getMax(int num, int... args){
		//args是数组,等价于int[]
		//先假设num最大,然后与args中的元素一一比较,如果有比它大的,就修改结果
		int max = num;
		
		for(int i=0; i<args.length; i++){
			if(args[i] > max){
				max = args[i];
			}
		}
		
		return max;
	}
	
}

3、陷阱:
(1) 这两个方法不是重载方法,编译器认为是同一个。因为在getSum方法中,它俩都是按照数组处理的。

public static int getSum(int[] array){
		int sum=0;
		for(int i=0;i<array.length;i++){
			sum+=array[i];
		}
		return sum;
	}
	public static int getSum(int... nums){
		int sum=0;
		//编译器把nums编译成int[]
		for(int i=0;i<nums.length;i++){
			sum+=nums[i];
		}
		return sum;
	}

但是它俩在方法调用时是不一样的。上面的方法调用时,必须传递一个int[]的实参数组,而下面的方法,可以传递一个int[]的实参数组,也可以传0~n个整数值。
(2)这两个方法是重载,但是没法用

	public static void main(String[] args) {
		System.out.println(getSum(1,2,3,6,7));
		System.out.println(getSum(1,2,3));
	}
	public static int getSum(int... nums){
		return 0;
	}
	public static int getSum(int a,int... nums){
		return 0;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值