JavaSE--方法
一、方法
1、方法的定义
// 语法格式 [修饰符列表] 返回值类型 方法名(形式参数列表){ 方法体; // return;终止当前方法 }
注意:方法写完之后需要调用去使用,不调用没法用
1)修饰符列表:
不是必选的
2)返回值类型:
可以是任何数据类型(基本数据类型和引用数据类型)
返回值:一般是指一个方法执行结束之后的结果,通常返回一个数据,返回值实际给的是调用者
当一个方法执行结束不返回任何值时,需要写void关键字,表示无返回值,但是也可以写return
3)注意:
如果返回值类型不是void,那么在方法执行结束后必须使用 return 值; ,来完成值的返回
如果没有return中编译器会报错,只要return执行,当前方法必然结束
4)方法名
方法名要见名知意,规则首字母消息,后面每个单词首字母大写
5)形式参数列表:
每一个参数都是局部变量,方法结束后内存释放
个数:0-n个,使用逗号隔开 (int x,int y,double z,String s)
6)可变长度参数列表:
a)语法
// 类型后面三个点,一定是三个点 类型...
b)概述
b1.可变长度参数要求的参数个数是:0到N个。
b2.可变长度参数在参数列表中必须在最后一个位置上,而且可变长度参数只能有1个
b3.可变长度参数可以当做一个数组来看待
public class ArgsTest { public static void main(String[] args) { m(); m(10); m(10, 20); m2(100); m2(200, "abc"); m2(200, "abc", "def"); m3("ab", "de", "kk", "ff"); String[] strs = {"a","b","c"}; // 也可以传1个数组 m3(strs); } public static void m(int... args){ System.out.println("m方法执行了!"); } // 报错 //public static void m2(int... args2, String... args1){} // 必须在最后,只能有1个。 public static void m2(int a, String... args1){ } public static void m3(String... args){ //args有length属性,说明args是一个数组! // 可以将可变长度参数当做一个数组来看。 for(int i = 0; i < args.length; i++){ System.out.println(args[i]); } } }
7)方法体
方法体中编写业务逻辑代码,遵循自上而下的顺序执行,
需要数据,数据来源就是形参
2、方法的调用
压栈:方法只有在调用的时候才会在栈中分配空间,并且调用时就压栈
弹栈:方法执行结束之后,该方法所在的空间就会释放,此时会发生弹栈
方法调用叫做压栈,方法结束叫做弹栈
/* 方法必须调用才能使用 1、调用: 类名.方法名(实际参数列表); 2、实参和形参的数据类型必须一一对应 */ public class MethodTest02{ public static void main(String[] args){ // 调用方法 // (10,2)叫做实际参数列表 实参 // 接收方法的返回值:使用变量来接收, // 也可以不接收,但是不接收没有意义啊 int result = MethodTest02.divide(10,2); System.out.println(result); // 自动类型转换 可以 double jieguo = MethodTest02.divide(10,2); // 注意::对于没有返回值的方法,变量不可以接收 } public static int divide(int x,int y){ T.print();// 调用方法不一定非要在main方法中,不要把main方法特殊化 return x / y; } } class T{ public static void print(){ System.out.println("hello"); } }
/* 调用方法时,什么时候类名可以省略 a方法调用b方法,a和b方法在同一个类的时候,“类名.”可以省略 不在同一个类中的时候,不可以省略 */ public class MethodTest04{ public static void main(String[] args){ MethodTest04.print(); // “类名.”可以省略不写,因为在同一个类中 print(); // 跨类调用的时候不可以省略 MyClass.print1(); } public static void print(){ System.out.println("hello"); } } // 类2 class MyClass{ public static void print1(){ System.out.println("hello"); } public static void print2(){ System.out.println("hello"); } }
3、实际参数列表
/* 实际参数列表 */ public class MethodTest03{ public static void main(String[] args){ // 使用小容量 byte b1 = 10; byte b2 = 20; // 把小容量传进去是可以的 int result = MethodTest03.divide(10,20); } public static int divide(int x,int y){ return x / y; } }
4、break;和return;语句的区别
/* break终止最近的循环 return终止当前方法 */ public class MethodTest05{ public static void main(String[] args){ for(int i = 0;i < 10;i++){ if(i == 5){ // break;// 终止for循环 return;// 终止当前方法,不是一个级别 也就是hello不会输出 } System.out.println(i); } System.out.println("hello"); } }
二、方法的重载overload
1、方法重载机制:
功能相似的,可以让方法名相同,更加易于代码的编写
注意:重载不能随便用,如果两个功能压根不相干,之间根本没有关系,此时使用重载机制,会导致编码更麻烦。无法进行功能的区分
2、java语言中,怎么进行方法区分:
首先java编译器会通过方法名进行区分,方法名相同下,会通过方法的参数类型区分
注意:方法重载和方法的返回值类型以及修饰符无关
public calss OverloadTest01{ public static void main(String[] args){ System.out.println(sum(10,20)); System.out.println(sum(10L,20L)); System.out.println(sum(10.0,20.0)); } // 计算int类型数据求和 public static int sum(int a,int b){ return a + b; } // 计算long类型数据求和 public static long sum(long a,long b){ return a + b; } // 计算double类型数据求和 public static double sum(double a,double b){ return a + b; } }
3、什么时候代码发生重载
条件1:在同一个类中
条件2:方法名相同
条件3:参数列表不同:参数的个数、类型、顺序不同都算不同
三、方法的递归
1、方法递归
方法自己调用自己,就是方法递归
当递归时,程序没有结束条件,一定会发生栈内存溢出错误
所以 :递归必须要有结束条件
public class RecursionTest01{ public static void main(String[] args){ doSome(); } public static void doSome(){ System.out.println("doSome"); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?