JAVA基础 —— 方法

目录

一、方法

二、方法的格式

1.方法的定义

1.1 最简单的方法定义 

1.2 带参数的方法定义

1.3 带返回值的方法定义 

2.方法的调用

 2.1 最简答的方法调用

 2.2 带参数的方法代用

 2.3 带返回值的方法调用

三、方法的重载

1. 重载概念

 2.  重载练习

2.1  区分以下方法是否构成重载 

2.2 方法重载

 四、方法练习

1.  数组遍历

 2. 求数组最大值

 3.  复制数组

 五、方法的内存

1. JAVA内存分配 

 1.1 栈类别内存调用和原理

 2. 方法传递

2.1 基本数据类型

 2.2 引用数据类型

 3. 方法传递参数


一、方法

1、方法(method)是程序中最小的执行单元。

public static void main(String[] args) {  // main方法,主方法
	System.out.println("heeloworld");
}

2、实际开发中,什么时候用到方法?

     重复的代码,鞠永独立功能的代码可以抽取到方法中。

3、实际开发中,方法由什么好处?

  • 可以提高代码的复用性
  • 可以提高代码的可维护性

4.方法的注意原则:

  • 方法不调用就不执行
  • 方法与方法之间是平级关系,不能互相嵌套定义
  • 方法的编写顺序和执行顺序无关
  • 方法的返回值类型为void,表示该方法没有返回值;没有返回值的方法可以省略return语句不写。如果要编写return,后面不能跟具体的数据。
  • return语句下面,不能编写代码,因为永远执行不到,属于无效代码。

二、方法的格式

1.方法的定义

把一些代码打包在一起,该过程称为方法定义

注意:方法名 命名遵循 驼峰原则

方法的定义格式:

public static 返回值类型  方法名(参数){

        返回体;
        return 返回值;
}

1.1 最简单的方法定义 

格式范例
public static void 方法名(){
        方法体(就是打包起来的代码);
}
public static void playGame(){
     System.out.println();
}

练习:看代码说结果

public static void main(String[] args) {
		System.out.println("a");
		method1();
		System.out.println("b");
	}

	public static void method1() {
		method2();
		System.out.println("c");
	}

	public static void method2() {
		System.out.println("d");
		System.out.println("e");
	}
}

运行结果:

1.2 带参数的方法定义

形参:全程形式参数,指方法定义中的参数

格式范例
单个参数
public static void 方法名(参数){...}
public static void method( int number){...} 
多个参数
public static void 方法名(参数1,参数2,...){...}
public static void getSum(int number1,int number2,...){...}

 方法定义的小技巧:

  1. 我要干什么?   - - - > 方法体(打印语句)
  2. 我干这件事情需要什么才能完成?   - - - > 形参

1.3 带返回值的方法定义 

方法的返回值其实就是方法运行的最终结果。


  • 如果在调用处要根据方法的结果,去编写另外一段代码逻辑
  • 为了在调用处拿到方法产生的结果,就需要定义带有返回值的方法。

return关键字:

  • 方法没有返回值:可以省略不写。如果书写,表示结束方法
  • 方法有返回值:必须要写。表示结束方法返回结果
格式范例
public static 返回值类型 方法名(参数){
        方法体;
        return 返回值;

}
public staitc int getSum(int a,int b){
 int c = a + b;
return c; 
}

2.方法的调用

方法定义后并不是直接运行的,需要手动调用才能执行,该过程称为方法调用

 2.1 最简答的方法调用

格式范例
        方法名();
playGame();

 2.2 带参数的方法代用

实参:全称实际参数,方法调用中的参数。

注意:方法调用时,形参和实参必须一一对应,否则程序将报错。

格式范例
单个参数

方法名(参数);
method(10);
多个参数
方法名(参数1,参数2,...);
getSum(10,20);

 2.3 带返回值的方法调用

格式
直接调用
方法名(实参);
赋值调用
整数类型 变量名 = 方法名(实参);
输出调用
System.out.println(方法名 (实参));

练习:

public static void main(String[] args) {
	
	//直接调用
		getSum(10, 20, 30);
	//赋值调用
		int sum = getSum(10, 20, 30);
		System.err.println(sum);
	//输出调用
		System.out.println(getSum(10, 20, 30));
	
	}
	
	public static int getSum(int num1,int num2,int num3) {
		int result = num1+num2 +num3;
		return result;
	}

三、方法的重载

需求:(1)定义一个方法求两个整数的和;定义一个方法求三个整数的和;定义一个方法求四个整数的和;(2)定义一个方法求两个小数的和;
 

public static int sumTwo(int a, int b) {
		return a + b;
	}

	public static int sumThree(int a, int b, int c) {
		return a + b + c;
	}

	public static int sumFour(int a, int b, int c, int d) {
		return a + b + c + d;
	}

	public static double ? ? ? (double a, double b) {  
        //通过查找???是sumTwodecimals
        //但是自己去定义很痛苦
        //因此会用到方法重载来解决
		return a + b;

	}

1. 重载概念

  • 在同一个类中,定义了多个同名的方法,这些同名的方法具有同种的功能。
  • 每一方法具有不同的参数类型参数个数,这些同名的方法,就构成了重载关系

简单记:同一个类中,方法名相同,参数不同的方法,与返回值无关

              参数不同:个数不同、类型不同、顺序不同

 2.  重载练习

2.1  区分以下方法是否构成重载 

要求:

  • 会判断方法之间是否构成重载关系
public class MethodDemo{
    public static void fn(int a){
         //方法体
  }
    public static int fn(int b){
         //方法体
  }
}

 原因:参数个数相同

public class MethodDemo{
    public static float fn(int a){
         //方法体
  }
    public static int fn(int a,int b){
         //方法体
  }
}
public class MethodDemo1{
    public static void fn(int a){
         //方法体
  }
}
public class MethodDemo2{
    public static int fn(double a){
         //方法体
  }
}

 原因:不在同一个类

public class MethodDemo{
    public static void fn(int a){
         //方法体
  }
    public static int fn(double b){
         //方法体
  }
}
public class MethodDemo{
    public static void fn(int a,double b){
         //方法体
  }
    public static void fn(double a,int b){
         //方法体
  }
}

 原因:顺序不同可以构成重载,但是不建议!

2.2 方法重载

  • 会定义重载的方法

需求:使用方法重载的思想,设计比较两个整数是否相同的方法。
要求:兼容全整数类型( byte,short,int,long )

public static void main(String[] args) {
	
		//调用
		campare(10, 20);
		campare((byte)10, (byte)20); //强制转换
	}
	//会把相同功能的方法名起成一样名字
	//好处1:定义方法的时候可以不用那么多单词命名
	//好处2:调用方法的时候也不需要那么麻烦
	public static void campare(byte b1,byte b2) {
		System.err.println(b1 == b2);
	}
	public static void campare(short s1,short s2) {
		System.err.println(s1 == s2);
	}
	public static void campare(int i1,int i2) {
		System.err.println(i1 == i2);
	}
	public static void campare(long g1,long g2) {
		System.err.println(g1 == g2);
	}

 四、方法练习

1.  数组遍历

需求:设计一个方法用于数组遍历,要求遍历的结果是在一行上的。例如: [11, 22, 33, 44, 55]

public static void main(String[] args) {
		// 1.定义数组
		int[] arr = { 11, 22, 33, 44, 55 };
		printArr(arr);

		/*
		 * System.out.println("abc"); //先打印abc,再进行换行 
		 * System.out.print("abc"); //先打印abc,不进行换行
		 */
	}

	// 2.定义方法用于数组遍历
	public static void printArr(int[] arr) {
		System.out.print("[");
		for (int i = 0; i < arr.length; i++) {
			// System.out.print(arr[i]+",");
			if (i == arr.length - 1) {
				System.out.print(arr[i]);
			} else {
				System.out.print(arr[i] + ",");
			}
		}
		System.out.print("]");
	}

 2. 求数组最大值

需求:设计一个方法求数组的最大值,并将最大值返回

public static void main(String[] args) {
		//1.定义数组
		int[] arr = {11,22,33,44,55};
		
		//2.调用方法求最大值
		int max = getMax(arr);
		System.out.println(max);
	}
	public static int getMax(int[] arr) {
		int max = arr[0];
		
		for (int i = 1; i < arr.length; i++) {
			if (arr[i] > max) {
				max = arr[i];
			}
		}
		return max;
	}

 3.  复制数组

需求:定义一个方法copyOfRange(int[] arr,int from, int to)
功能:将数组arr中从索引from ( 包含from)开始。到索引to结束(不包含to)的元素复制到新数组中,将新数组返回。

public static void main(String[] args) {
		// 1.定义数组
		int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

		// 2.调用方法复制数组
		int[] copyArr = copyOfRange(arr, 3, 7);

		// 3.遍历copy数组
		for (int i = 0; i < copyArr.length; i++) {
			System.out.print(copyArr[i] + ",");
		}
	}

	public static int[] copyOfRange(int[] arr, int from, int to) {
		// 1.定义新数组
		// 静态:知道所有元素
		// 动态:知道元素个数
		int[] newArr = new int[to - from];

		// 2.把原始数组arr中的from到to对应元素,直接拷贝到newArr中

		int index = 0; // 伪造索引思想
		for (int i = from; i < to; i++) {
			// 格式:数组名[索引] = 数据值;
			newArr[index] = arr[i];
			index++;
		}
		// 3.返回新数组
		return newArr;
	}

 运算结果:

 五、方法的内存

  1. 方法调用的基本内存原理
  2. 方法传递基本数据类型的内存管理
  3. 方法传递引用数据类型的内存管理

1. JAVA内存分配 

类别内容
方法运行时使用的内存,方法进栈运行,运行完毕就出栈
new出来的,都在堆内存中开辟了一个小空间
方法区存储可以运行的class文件
本地方法栈JVM在使用操作系统功能的时候使用,和我们开发无关
寄存器给CPU使用,和我们开发无关

 1.1 栈类别内存调用和原理

public static void main(String[] args) {
		int number = 100;
		System.out.println("number的值为"+ number);
	}

内存执行前后前后变化:

 2. 方法传递

2.1 基本数据类型

变量中存储的是真是的数据。

public static void main(String[] args) {
		int a = 10;
		double b = 20.0;
	}

 2.2 引用数据类型

 只要new出来的都是引用数据类型。


获取数组数据:

  • ①栈内存中变量arr记录的不是数组中真实数据{1,2,3},而是记录其他空间的地址值
  • ②先通过arr找到右边数组,再通过索引获取数据。

引用:使用了其他空间中的数据

public static void main(String[] args) {
		int[] arr = {1,2,3}; 
	}

 3. 方法传递参数

基本数据类型引用数据类型
int a = 10;
int b = a;  
int[] arr1 = {1,2,3,4,5};
int[] arr2 = arr1;
传递的是真实数据传递的是地址值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hgngy.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值