3.1 JAVA方法:
JAVA方法:
何为方法
- 方法是语句的集合,这个集合执行一个功能
- 方法包含于类或对象中
- 方法在程序中被创建,在其他地方被引用
- java全是值传递
方法的定义和调用
方法的定义:
修饰符 返回类型 方法名(参数类型 参数){
方法体
return 返回值;
}
- 修饰符(可选):告诉编译器如何调用该方法
- 返回值类型:方法可能会返回值;无返回值的方法用void
- 方法名:开头小写,后面首字母大写
- 参数类型(可选):一个方法被调用时,传递值给参数,这个值成为实参或变量;参数是可选的,方法可以不包含任何参数,如void方法不包含任何参数
- 形参:定义方法时,用于接收外界输入的数据
- 实参:调用方法时,向方法传递的数据
- 方法体:具体语句,实现的功能
- 返回值:除了void方法外,其余都可以返回;一般把return写在方法的最外层 ;void用 return; 终止方法、其他类型retrun 0 用于终止方法
方法的调用:
对象名.方法名(实参);
void();
- 当方法返回一个值的时候,方法调用通常会被当做一个值如:int a=max(30,40);
- 当方法是void时,方法调用一定是一条语句
方法的小细节:
返回值的细节:
- 一个方法最多有一个返回值。当返回多个结果的时候,我们可以把方法定义成数组类型,把结果存入数组,最后返回一个数组
- 返回类型可以为任何类型
- 如果方法要求有返回数据类型,则方法体中最后执行的语句必须为return 值,且返回类型必须和return的值类型保持一致或兼容(如方法是double类型,返回int是可以的;反之则不行,会丢失精度)
- 如果方法是void,则方法体中可以没有return语句,或者只写return ;
形参列表的细节:
- 一个方法可以有0个参数,也可以有多个参数,中间用逗号隔开
- 参数类型可以为任意类型
- 调用带参数的方法时,一定要对应着参数列表传入相同类型或兼容类型的参数!
- 形参和实参的类型要一致或兼容、个数、顺序必须一致!
方法体的细节:
- 一个方法里不能定义另一个方法
方法调用的细节:
-
同一个类中的方法调用:直接调用即可,格式 方法名(参数列表) ;
-
跨类中的方法调用:需要通过new一个对象调用, 格式如下:
-
跨类的方法调用还和修饰符相关
静态方法与非静态方法
静态方法:
当定义方法时加修饰符static,此时的方法就是静态方法。其他的类(自己这个类也是)可以直接调用这个方法,通过类名 . 方法名(); 就直接调用
非静态方法:
当定义方法时不加修饰符static,此时的方法就是非静态方法,其他的类(自己这个类也是)调用这个方法的时候必须先实例化方法所在的类。
通过 对象类型 对象名 =new 对象值(); 最后再通过对象名 . 方法()来调用这个非静态方法
重点:一个静态方法不能调用一个非静态方法
以下代码会报错!!!

值传递和引用传递
方法的值传递就是传递基本数据类型的实参,传递的参数的值并不会发生改变,原因:若参数是基本数据类型,调用方法时会在栈中开辟一个方法栈,在这个方法栈里面执行完的方法体后,方法栈弹出
//值传递
public class Demo02 {
public static void main(String[] args) {
int a=1;
System.out.println(a); //结果是1
change(a);
System.out.println(a); //结果还是1
}
public static void change(int a){
a=10;
}
}
方法的引用传递就是传递引用类型的实参,传递的参数发生改变
原因:若参数是引用类型,实际上是传递了地址,方法体的形参指向了堆中的内容。调用方法体时在栈中开辟了一个方法栈,在这个方法栈里面执行完的方法体后,虽然方法栈弹出,但是引用类型是存在于堆中的,方法执行完后,堆并不会消失,所以传递的参数就会发生改变
//引用传递:传递的是对象的地址,本质还是值传递
public class Demo03 {
public static void main(String[] args) {
//实例化一个person对象
Person person=new Person();
System.out.println(person.name); //结果是NULL
change(person); //向方法传递了一个对象
System.out.println(person.name); //结果是aaaaa
}
public static void change(Person person){
//person是一个对象
person.name="aaaaa";
}
}
//定义了一个Person类,有一个属性:name
class Person{
String name;
}
方法的重载
重载就是在一个类中,有相同的函数名,但形参不同的函数
方法重载的规则:
- 方法名必须相同
- 参数列表的必须不同,与形参的名字无关
- 返回类型无要求
方法的重载可以使得调用相同的方法名的时候,根据参数列表的不同(如个数、类型)和接收结果的变量类型不同,从而选择对应的方法

命令行传参
通过命令行对一个类进行传参
- 打开cmd 进入类的存储路径
- javac 类名.java 生成类名.class
- java 包名.类名 参数
可变参数
定义一个方法时候,参数列表里的参数个数不确定,可以通过可变参数来解决。可变参数可以减少方法的重载(方法的重载必须是相同类型的情况下);可以这么认为,可变参数就是一个长度自定义的数组
规则:
- 在方法的声明中,在指定参数类型后面加三个点 ... 即方法名(数据类型... 形参);
- 一个方法只能有一个可变参数,它必须是方法的最后一个参数
- 调用的方法里含有可变参数时,实参的类型必须和形成的类型保持一致
可变参数的细节:
- 可变参数的实参可以是0个或者任意多个
- 可变参数的实参可以为数组
- 可变参数的本质就是数组
- 一个方法只能有一个可变参数,它必须是方法的最后一个参数
使用可变参数时,可以当作数组来使用
public class Demo02 {
public static void main(String[] args) {
printMax(1,34,45,12,4); //1会传递给a,34,45,12,4会传递给numbers,就如同进了一个数组
printMax(1,new double[]{1,2,3,4,5}); //也可以传递一个数组
}
public static void printMax(int a,double... numbers){//numbers可以当作数组
if(numbers.length==0){
return;
}
double result=numbers[0];
for (int i = 1; i <numbers.length ; i++) {
if(numbers[i]>result){
result=numbers[i];
}
}
System.out.println("The max value is:"+result);
}
}
递归
递归就是方法调用自己
递归结果包括两个部分:
- 递归头:什么时候不用调用自身方法。如果没有头,会死循环 也就是递归的尽头
- 递归体:什么时候需要调用自身方法
递归的规则:
- 执行一个方法时,就创建一个新的受保护的独立空间
- 方法的局部变量是独立的,不会相互影响,比如n变量
- 如果方法中使用的是引用类型,就会共享该引用类型的数据
- 递归必须向退出递归的条件逼近,否则就会无限递归,出现栈满StackOverflowError
大计算一般不用递归,因为java用的是栈机制
public class Demo03 {
public static void main(String[] args) {
System.out.println(f(10));
}
//5! 5*4*3*2*1
public static int f(int n){
if(n==1){
return 1;
}else{
return n*f(n-1);
}
}
}
作用域
java中作用域分为全局变量和局部变量
全局变量:也就是属性,作用域为整个类体,全局变量可以不赋值,直接使用,因为有默认值
局部变量:除了属性之外的其他变量,作用域为定义它的代码块中,局部变量必须赋值后才能使用,因为没有默认值
作用域的细节:
- 属性和局部变量是可以重名的,访问时遵循就近原则
- 同一个作用域中,两个局部变量不能重名
- 属性的生命周期伴随对象的创建而创建,伴随对象的死亡而死亡;局部编辑则是和代码块一起的,即在一次方法调用的过程中
- 全局变量/属性:可以被本类使用或其他类使用(通过对象调用);局部变量:只能在本类中对应的方法中使用
- 全局变量/属性可以加修饰符;局部变量不能加修饰符
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix