【Java】Java方法详解篇

【Java】java方法详解篇



方法

方法:完成特定功能的饿代码块
作用:

  • 提高代码复用性和可维护性
  • 但是并不能提高程序的运行效率

定义格式:

  • 修饰符
  • 返回值类型:用于限定返回值的数据类型
  • 方法名:方法的名字,便于我们调用
  • 参数类型:用于限定调用方法时传入数据的类型
  • 参数名:用于接收调用方法时传入数据的变量(用于告诉方法的使用者,调用该方法时的需要)
  • 方法体:完成我们需要的功能的代码
  • return语句:结束方法,并把返回值传递给调用者
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2……){
		方法体;
		return 返回值;
}

注意事项

  • 实参的数目,数据类型和顺序需和所调用的方法声明的形式参数列表匹配
  • return终止方法的运行并指定返回数据
  • java中进行方法调用中传递参数时,遵循值传递的原则(传递的都是数据的副本)
  • 基本数据类型传递的时该数据的copy值
  • 引用数据类型传递的是该对象引用的copy值,但指向的是同一个对象

void修饰的方法的调用

void:

  • 当没有方法返回值时,返回值类型写void

注意:

  • 返回值类型为void的方法只能单独调用
  • void作为返回值类型的方法,可以不写return语句,或使用ruturn;结束方法,
public static void testOne(){
	System.out.println("HelloWorld");
	//可以不写return,方法中的代码执行完毕后,方法会自动结束
}
public static void testTwo(){
	System.out.println("HelloWorld");
	rerurn;
	System.out.println("这句话不会执行,因为上面结束了方法");
}
public static void testThree(){
	System.out.println("HelloWorld");
	return 0;
	//void方法不能return值,因为返回值的话必须要有返回值类型
}

方法的重载

方法的重载

  • 英文Overload

  • 概念:在同一个类中,有多个方法名相同,参数列表不同的方法

  • 方法重载的特点

    • 参数个数不同
    • 参数的数据类型不同(包括数据类型相同,但数据顺序不同,例如:int a,double b 和 double b,int a也是不一样的)
  • 方法重载和什么无关

    • 和返回值类型无关
    • 和参数变量名无关
    • 和方法体无关

方法的形参是基本数据类型

  • 方法的形参是基本数据类型,形参的值改变不会影响实际参数
    • 原因:因为形参是在方法内部定义的一个新的局部变量,与方法外的实际参数变量是2个不同的变量,所以互不影响

方法的形参是引用类型

注意

  • 方法的形参是引用数据类型:形参的值改变是否影响实际参数要看引用关系
    • 如果形参是修改自身保存的引用,不会影响实际参数
      • 原因:因为形参是调用方法中的一个单独变量,实际参数是定义在main方法中的另一个单独变量,形参改变其保存的引用指向,并不影响实际参数的引用指向
    • 如果形参是通过引用修改堆内存中保存的数据,会影响实际参数获取的值
      • 原因:因为形参是调用方法中的一个单独变量,实际参数是定义在main方法中的另一个单独变量,形参通过引用修改的是堆内存中的数据,而实际参数也是指向该堆内存中的数据,所以形参修改后,实际参数获取的值也会改变
// 形参是引用数据类型,是否影响实际参数
public class demo{
	public static void main(String[] args) {
		// 数组
		System.out.println("------------修改数组的引用指向------------");
		int[] arr = {1, 2, 3};
		System.out.println("原始值: arr=" + Arrays.toString(arr));
		changeArr(arr);
		System.out.println("修改后: arr=" + Arrays.toString(arr));
		
		
		System.out.println("------------通过数组引用修改堆内存中数组的元素值------------");
		System.out.println("原始值: arr=" + Arrays.toString(arr));
		changeArrElement(arr);
		System.out.println("修改后: arr=" + Arrays.toString(arr));
	}
	
	// 修改数组的引用: 不会影响实际参数
	private static void changeArr(int[] arr) {
		arr = new int[]{999, 999};
	}
	
	// 通过数组变量的引用修改堆内存中数组的元素: 会影响实际参数
	private static void changeArrElement(int[] arr) {
		arr[0] = -1;
		arr[1] = -1;
		arr[2] = -1;
	}
}

结果:
在这里插入图片描述


递归结构

递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。

利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。

例如

void aa(int a) {
		
		if (a<10) {
			a++;
			aa(a);
		}
		
	}

递归结构包括两个部分:

  1. 定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。
  2. 递归体。解答:什么时候需要调用自身方法。

递归的缺陷
简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

GengMS_DEV

你的鼓励就是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值