方法
方法的定义:把一些重复的代码打包到一起,这个过程就叫方法的定义
方法(method)是在程序当中最小的执行单元
比如:我们最常用的main方法其实就是一个方法
方法定义的格式:
public static 返回值类型 方法名(形参){
方法体;
return 返回值;
}
注意:方法必须先定义后调用,否则程序会报错
格式说明:
返回值类型:就是要返回给方法调用处的数据类型,比如:基本数据类型(int short long byte)都可以,数组也行
注意:这里如果不想写返回值返回值类型就可以写void,表示无返回值
方法名:就是给方法取的名字,比如:getSum,表示的就是求和的意思,注意方法名要见名知意,驼峰命名
形参:就是形式参数,格式:数据类型 变量名,参数与参数之间要用逗号隔开,注意形式参数要和实际参数保持一致
比如:(int a,int b...);
方法体:就是打包起来的代码,比如:System.out.println(形参);
return关键字:方法执行到了return关键字,则代表结束整个方法的执行
返回值:就是方法的运行结果
方法什么时候会被使用?
重复的代码和具有独立功能性的代码可以抽取到方法中
实际开发中的使用场景
提高代码的重复性&可维护性
代码示例:
package com.hai.methoddemo; public class MethodDemo1 { //目标:掌握最简单的定义方法和调用格式 public static void main(String[] args) { //在main方法里面调用刚才写的代码 playGame(); playGame(); } //注意:方法体要写在main方法的外面,类的里面!! //我都没有定义方法,傻逼了吧 public static void playGame() { //方法体 System.out.println("选人物"); System.out.println("准备开局"); System.out.println("对线"); System.out.println("骂队友"); System.out.println("送人头"); System.out.println("崩盘"); System.out.println("GG"); } }
方法调用
方法调用的定义:方法定义后不能直接运行,需要手动调用之后才能执行,这个过程就叫做方法的调用
方法调用的格式:
方法名(实参);
格式说明:
实参:就是实际参数,这里的具体数据值就是传给被调用的方法中实际要进行操作的值,比如:(1,2.3,66666...)基本数据类型
应该都是可以的
方法调用的三种格式:
1.直接调用 方法名(实参);
比如:getSum(10,20);
2.赋值调用 数据类型 变量名=方法名(实参);
System.out.println(变量);
比如:int result=getSum(10,20); System.out.println(result);
3.输出调用 System.out.println(方法名(实参));
比如: System.out.println(getSum(10,20));
代码示例:
package Test; public class Test5 { public static void main(String[] args) { //设计一个方法用于数组遍历,要求遍历的结果是在一行上的 [11,22,33,44,55] //1.定义一个数组 int[] arr = {11, 22, 33, 44, 55}; //2.调用方法遍历数组 printArr(arr); } //System.out.println("abc"); 先打印abc然后再换行 //System.out.print("abc"); 直接打印abc不换行 //System.out.println(); 不打印只换行 //System.out.print(); 不打印不换行 //定义方法用于数组遍历 //我要干什么? 遍历数组 public static void printArr(int[] arr) { System.out.print("["); for (int i = 0; i < arr.length; i++) { if (i == arr.length - 1) { System.out.print(arr[i]); } else { System.out.print(arr[i] + ","); } } System.out.print("]"); } //干这件事情我需要什么? 参数 数组 //方法是否需要返回值 不需要 }
什么时候要用到带有返回值的方法?
就是方法的调用处需要用到方法的返回值去编写另一段代码
形参&实参
形参:全称形式参数,方法定义中的参数 比如:getSum(10,20); int a=10,int b=20; getSum(a,b);
实参:全称实际参数,方法调用中的参数 比如:public static void getSum(int num1,int num2){ 方法体;}
注意:方法调用的时候形参和实参必须一一对应,否则程序会报错
方法定义的小技巧
1.我要干什么? 方法体
2.我干这件事情需要什么才能完成? 形参
3.调用处是否需要返回值? 返回值
代码示例:
package Test; public class Test1 { public static void main(String[] args) { //需求:定义一个方法求长方形的周长,将结果在方法中打印 //目标:根据不同的需求,选择定义无参的方法,还是带参数的方法 getLength(5.4, 6.1); } //1.我要干什么?(一般从题目需求里面去找) 求长方形的周长 方法体 getCircum //2.我干这件事情,需要什么才能完成? 长 length 宽 width public static void getLength(double len, double width) { //方法体 //有的公式的定义不清楚,记得去百度查好来!!! double result = (len + width) * 2; System.out.println(result); } }
方法的注意事项
方法不调用就不执行
方法和方法之间是平级关系,方法与方法之间不能嵌套定义
方法的编写顺序和执行顺序无关
方法的返回值类型为void,则表示没有返回值,没有返回值的方法可以省略retrue语句不写
如果要写return,后面不能跟具体的数据
return的语句下面不能写其它的语句,因为永执行不到,属于无效代码
方法的重载
定义:同一个类中,方法名相同,参数不同的方法,与返回值无关
参数不同:个数不同,类型不同,顺序不同
代码示例:
package Test; public class Test4 { public static void main(String[] args) { //需求:使用方法重载的思想,设计比较两个整数是否相同的方法 //方法的重载:同一个类方法名相同,参数不一样(个数,类型,顺序) //要求:兼容全整数类型(int short long byte) //我的思路都错了,要设计四个方法!!!! //方法调用处的格式是:方法名(参数); //下面的方法没有比较小数的方法,所以也调用不了!!! compare((byte) 888, (byte) 688); } //1.我要干什么? 比较两个整数是否相同 //会把相同功能的方法名起成一样的名字 //好处1:可以在定义方法的时候可以不用记那么多的单词 //好处2:调用方法的时候也不需要那么麻烦了 public static void compare(byte b1, byte b2) { System.out.println("byte"); System.out.println(b1 == b2); } public static void compare(short s1, short s2) { System.out.println("short"); System.out.println(s1 == s2); } public static void compare(long n1, long n2) { System.out.println("long"); System.out.println(n1 == n2); } public static void compare(int i1, int i2) { System.out.println("int "); System.out.println(i1 == i2); } //2.我干这件事情需要什么才能完成? 参数 //3.方法调用处是否需要返回值 需要 }
方法调用的基本原理
先进后出
执行流程是从上往下执行,见到方法进入方法,方法执行完之后返回调用处
内存中的基本数据类型&引用数据类型
基本数据类型数据值是存储在自己的空间中
特点:赋值给其它变量也是赋的真实的值
引用数据类型数据值是存储在其它空间中,自己空间中存储的是地址值
特点:赋值给其它变量,赋的也是地址值
引用:使用了其它空间中的数据
方法的值传递
基本数据类型的值传递
传递的是具体的值,形参的改变,不会影响实际参数的改变
引用数据类型的值传递
传递的是地址值,形参的改变,会影响实际参数的改变