java语句块、方法、方法重载及递归调用

3.3 语句块
1、用花括号扩起的任意数量的java语句 ,语句块中定义的变量作用域仅限于语句块当中
在这里插入图片描述
2、语句块能够使用外部变量,但是外部不能使用语句块中定义的变量。
在这里插入图片描述
3.4 方法:带名字的语句块
1、方法定义:用来完成特定功能的代码片段,类似于其他语言的函数。
2、方法声明格式:[修饰符1 修饰符2] 返回值类型 方法名(参数类型1 参数名称、参数类型2 参数名称···){ java语句(方法体 return 返回值)}
3、方法的详细说明
①形式参数:在方法声明时用于接收外界传入的数据
②实参:调用方法时实际传给方法的数据
③返回值:方法在执行完毕后返还给调用它的数据
④返回值类型:事先约定的返回值的数据类型,⭐如无返回值,必须显示指定为void
4、注意
①实参的数目、数据类型和次序都必须相匹配
②return语句中止方法的运行并指定要返回的数据类型
③Java进行方法调用传递参数时,遵循值传递的原则(传递的都是数据的副本)
④基本类型传递的是该数据的copy值
⑤引用类型传递的是该对象引用的copy值,但指向的是同一个对象
⑥不能在一个方法内部定义方法
⑦参数如果没有,小括号可以留空
⑧方法调用之后,没有调用就不会执行,要想执行就需要调用它
⑨方法中的参数可以与方法名重名,主函数中的变量名也可以与方法名相同
5、调用方式
①单独调用。这种方法无法使用方法的参数值
②打印调用。这种方式可以将方法的返回值直接打印
③赋值调用。这种方式可以将方法的返回值赋给一个变量,需要注意数据类型必须对应
6、调用流程
根据名称找到方法==》值传递原则下参数传递==》执行方法体==》返回结果
5、值传递原则
①基本数据类型,传递的是数据的拷贝 。“值传递”,在这种方式下,被调用对象对新数据的改变不影响源数据的取值,如基本类型的传递。
在这里插入图片描述
②引用数据类型,传递的是传递的引用地址的拷贝,而不是该对象本身 。被调用对象新数据的改变影响源数据内容,因为新数据和源数据的引用虽然不同但却指向同一数据对象,如类型对象的传递。
在这里插入图片描述
3.5 方法的重载
⭐重载的方法,实际上是完全不相同的方法,只是名称相同而已
1、构成重载的条件
形参类型不同

	//参数的类型存在差异会造成方法重载
	public static double add(double n1,int n2) {  //加了public可以被类随意调用
		double sum = n1+n2;
		return sum;

形参个数不同

	//形参个数存在差异会造成方法重载
	public static int add(int n1,int n2,int n3) {  //加了public可以被类随意调用
		int sum = n1+n2+n3;
		return sum;
	}

形参类型顺序不同

	//参数的类型顺序不同会造成重载
	public static double add(int n2,double n1) {  //加了public可以被类随意调用
		double sum = n1+n2;
		return sum;
	}

2、不构成重载的情况
①只有返回值不同不构成方法的重载

	//编译错误,只有返回值不同不会构成重载,因为不知道返回什么
	/*
	public static double add(int n1,int n2) {  //加了public可以被类随意调用
		double sum = n1+n2;
		return sum;
	}
	*/

②只有形参的名称不同,不构成方法的重载

	/*
	//编译错误,只有参数的名称不同也不会构成重载
	public static int add(int n2,int n1) {  //加了public可以被类随意调用
		int sum = n1+n2;
		return sum;
	}
	*/

3.6 递归结构:自己调用自己
1、递归结构的组成
①递归头:什么时候不调用自己,如果没有递归头,则程序将陷入死循环当中。
②递归体:什么时候需要调用自己的方法。
2、递归缺陷:占用大量系统堆栈,内存耗用多,消耗时间长

/**
 * 测试递归调用之阶乘
 * @author 14323
 *
 */
public class TestRecursion02 {
	public static void main(String[] args) {
		long a1 = System.currentTimeMillis();//获取当前时间
		System.out.println(jieCheng(10));
		long a2 = System.currentTimeMillis();
		System.out.println(a2-a1);//获取程序运行时间
	}
	
	static int jieCheng(int a){
		if(a==1) {
			return a;
		}else {
			return a*=jieCheng(a-1);
		}
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值