【Java】5.2 方法详解

目录

方法

递归方法

方法重载


====================================================

方法

1.从语义定义的角度来看必须定义在类中,类.方法||实例.方法

2.方法到底属于累还是属于对象:

若有static修饰的方法,属于类本身,而不是属于实例(可以用类调用也可以用实例调用);

若无static修饰的方法,属于实例(仅可以用实例调用)

3.调用方法时,必须要有主调对象(主语,也就是调用者,比如孙悟空.飞 —— 孙悟空就是主调对象,调用飞这个方法)

Java方法的参数传输机制:只有一种 ———— 值传递(副本传递)

/*********************************************************************************************

//示例1:

//派了a,b两个分身过去,但是main函数中的本身a,b的值不变

//因此传参时是一种副本传参,无论副本如何变化,本身的值不会发生变化。应是两个ab的地址不同

public class PrimitiveTransferTest {
	
	public static void swap(int a,int b) {
		int temp=a;
		a=b;
		b=temp;
		System.out.println("swap方法里,a是"+a+",b是"+b);
	}
	public static void main(String[] args) {
		int a=6;
		int b=9;
		swap(a,b);
		System.out.println("swap方法使用后,a是"+a+",b是"+b);
	}
}

************************************************************************************/

 

 

/*********************************************************************************************

//示例2:

//这里【不是】传入swap方法的时ds实例本身而非替代品

//这里同样是两个堆栈,一个是main(),另一个是swap(),也与上一个类类似,传递的值是ds的副本

//但是这里的ds指的是变量(类似指针),也就是两个变量指向堆内存里的同一个对象,而不是复制了一个对象

//故swap的操作是针对堆内存中ds对象操作的,因此有该现象

class DataSwap{
    int a;
    int b;
}
public class ReferenceTransferTest {
	public static void swap(DataSwap ds) {
		int temp=ds.a;
		ds.a=ds.b;
		ds.b=temp;
		System.out.println("swap方法里,a是"+ds.a+",b是"+ds.b);
	}
	public static void main(String[] args) {
		DataSwap ds=new DataSwap();
		ds.a=6;
		ds.b=9;
		swap(ds);
		System.out.println("使用swap方法后,a是"+ds.a+",b是"+ds.b);
	}
}

 

************************************************************************************/

形参个数可变的方法:定义形参时,用法 type... 形参名(int... num)

注意点:

A. 每个方法最多【只能有一个】形参个数可变的参数

B. 形参个数的参数必须【位于最后】

 

===================================================

递归方法

递归在里面包含一个隐式循环,递归就是在方法中再次调用自己。

递归,一定要保证:在合适的时候结束调用自身 ———— 即设置递归边界

且,递归边界一定要向“结束”的那一端递归,否则就是一个死循环或死递归,不会产生结果

/*********************************************************************************************

//示例3:

//输出fn(10)递归:递归边界、递归函数、返回值

public class Recursive {
	public static int fn1(int n) {
		if(n==1) return 4;
		if(n==0) return 1;
		return fn1(n-1)*2+fn1(n-2);
	}
	
	public static int fn2(int n) {
		if(n==20) return 1;
		if(n==21) return 4;
		return fn2(n+2)-2*fn2(n+1);
	}
	public static void main(String[] args) {
		System.out.println(fn1(10));
		System.out.println(fn2(10));
	}
}

************************************************************************************/

 

===================================================

方法重载

归纳:二同一不同

所谓二同就是:同一个类、方法名相同

一不同就是:形参列表不同

注意点:A 方法重载与【返回值类型】无关

B 方法重载与【是否有static修饰】无关

 

怎么才能唯一确定所调用的方法?

A 主调者。 //谁调用了这个方法

B 方法的名字 //调用了哪个方法

C 匹配实参所对应的类型 //怎样调用这个方法

 

/*********************************************************************************************

//示例4:

//一个类、一个名,唯一不同就是形参类型和个数,如下是String和String[]

public class OverloadVarargs {
	public void test(String str) {
		System.out.println("一个字符串");
	}
	public void test(String... str) {
		System.out.println("一串字符串");
	}
	public static void main(String[] args) {
		OverloadVarargs overload=new OverloadVarargs();
		overload.test("ehdrjkew");
		overload.test("wjhgdj","eshfk");
	}
}

 

************************************************************************************/

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_之桐_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值