方法的理解

方法:

什么是方法

方法,就是实现某个功能的代码块

方法的作用:

简化自己的代码,当我们定义与调用某一个功能时,如果不使用方法,那我们每次调用该功能,都需要输入该功能对应的大量代码。

所以,我们将一个功能,封装在一个方法里,当我们需要用到这个功能时,就调用这个方法,这样就能简化我们的代码。

方法的形式:

访问权限修饰符 返回值类型 方法名字(参数类型 参数1,参数2,…){

​ 方法体

​ return //返回值

}

例如主方法:

public static void main(String[] args){
    方法体
    //return XXX;          //返回值,如果上面是void这里就不要return
}

注意:

方法名字,除了主方法,是可以随意命名的

返回值的类型是什么,返回值类型的名称就是什么:

例如我们没有返回值,返回值类型就是void

​ 我们返回值为整数形式,返回值类型就可以用int

​ ··········

方法的参数:

方法调用时,我们在定义方法时,定义了几个参数,调用时,就要传入几个参数

定义时传入的参数,叫做形式参数,形参(声明该方法被调用时,需要传入一种什么样的参数:包括类型,个数,顺序)

调用时传入的参数,叫做实际参数,实参,实参一定要按照形参定义的类型,个数,顺序来传入

即形参实参需要一一对应

调用一个方法时的流程:

1.加载class文件

2.调用主方法(主方法在栈内存中开辟空间)

3.在主方法中,用类名.方法名,调用sum方法,传入参数

4.sum方法被调用,开始执行(在栈内存中开辟空间)

5.sum方法中,对传入的参数进行操作

6.并得到一个结果,返回该结果

7.主方法中定义一个变量,接收sum方法得到的结果

8.打印得到的结果
在这里插入图片描述

注意:

若一个方法是被static修饰的静态方法,该方法在某个类中定义,同时在该类中调用,那么可以直接用方法名去调用,等同于 类名.方法名

方法必须定义在类中,不能定义在方法中

方法的可变参数:

在方法的定义阶段,传入形参时,如下列形式定义形参:

static void add(double cutoff,int... arr){}

其中 int… arr[] 就是可变参数

可变参数本质就是一个语法糖==>用来方便程序员的

如上面那个代码,我们在传入实参时,就可以传入任意个数的参数了:

add(0.9,1,2,3,4,5.......)

运用实例:

public class Demo {
	
	public static void main(String[] args) {
        //此处传入可变参数
		int[] arr = times(0.5,2,4,6,8);
        //结果为 [1,2,3,4]
		System.out.println(Arrays.toString(arr));	
	}
	
	//此处定义可变参数
	public static int[] times(double cutoff,int...arr) {
		for (int i = 0; i < arr.length; i++) {
			arr[i] = (int) (arr[i] * cutoff);
		}
		return arr;
	}
}

方法的重载:

观察下列代码:

static void add(int a,int b){}
static void add(double a,int b){}
static void add(int a,double b){}
static void add(double a,double b){}
static void add(int a,int b,int c){}

这种代码是可行的,为什么?

这就是方法的重载:

​ 在同一个类中,允许存在同名方法,前提是他们的 参数列表参数个数,参数顺序,参数类型 至少有一个存在区别 ==>即:两同一不同

我们在调用时,会根据传入的实参的 个数,顺序,类型 ,来调用对应的方法

方法的值的传递机制:

方法的值的传递机制分为两种类型:

​ 基本类型参数 / 引用类型参数

基本类型参数:

观察下列代码:

public static void main(String[] args){
    int num=10;
    change(num);
    System.out.println(num);
}
static void change(int num){
    System.out.println(num);
    num=20;
    System.out.println(num);
}

该代码输出结果为: 10 20 10

分析:首先初始化num=10,然后调用change方法,change方法中首先输出10,然后改变num=20,然后输出num=20,由于我们传递基本类型参数时,传递的是参数值,所以主方法中的num值并不会收到change方法中的影响,此时主方法中输出的num还是10

public static void main(String[] args){
    int[] arr={10};
    change(arr);
    System.out.println(arr[0]);
}
static void change(int[] arr){
    System.out.println(arr[0]);
    arr[0]=20;
    System.out.println(arr[0]);
}

该代码输出结果为: 10 20 20

分析:首先初始化int[] arr={10},然后调用change方法,change方法中首先输出10,然后改变arr[0]=20,然后输出arr[0]=20,由于我们传递引用类型参数时,传递的是内存地址,在内存地址中,arr[0]的数值已经被修改为20,所以主方法中的arr[0]输出为20;

总结:

传递基本类型参数:传递的是参数值

传递引用类型参数:传递的是参数所引用的堆内存的地址

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值