方法就是一段可以完成某个特定功能的并且可以被重复利用的代码片段。
方法的出现,让代码具有了很强的复用性。只能定义在类体中。
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体;
}方法定义完要调用,不然不会执行,其方法的返回结果给调用者main方法
1、修饰符列表:可选项,可写成:public static ;
2.1、返回值类型可以是Java中的任何类型;
2.2、返回值一般指的是一个方法执行结束之后的结果,结果通常是一个数据,即称为值;
2.3、void:表示无返回值类型,表示方法执行结束后,不返回任何结果;
2.4、如果返回类型不是void,那么方法执行结束时必须使用”return 值;“,这句话完成值得返回,如果没有则编译器报错;
2.5、return和break的区别:break终止循环,return终止当前方法;
3、方法名只要是合法的标识符就行,首字母小写,后面每个单词首字母大写。见名知意。
4、方法体:方法体当中的代码遵循自上而下的顺序依次逐行执行
5.1、形式参数列表:简称形参,每个形参都是局部变量,方法结束之后内存释放;5.2、个数可以是0~N个;
5.3、多个形参用英文“,”隔开,起决定作用的是数据类型,变量名随意;
方法的调用
语法:类名.方法名(实际参数列表);
1、实数列表数据类型与本方法形参列表的数据类型和个数必须一一对应;
2、对于没有返回值类型的方法,实参传递,方法不能接收;
3、如果有返回值类型,调用时可以没有实参,但是返回值还是会返回,方法执行完内存释放;
4、同一类里,方法调用时可以省略“类名.”
JVM内存结构
栈数据结构
方法执行时的内存变化
方法只有在被调用时才会在栈中分配空间,并且调用时就是压栈;
方法执行结束,方法需要的空间就会释放,此时就会发生d栈动作;
方法的重载
什么时候用重载?
在同一给类当中,功能相似
满足重载的条件?
1、类名相同;
2、形参列表不同(即:参数顺序,参数类型,参数数量,三者满足其一不同就行);
总结,能让java编译器区分方法不同就行;
方法的重载和返回值类型以及修饰符无关!!!
方法的递归
方法自己调用自己
使用递归的时候,必须添加结束条件,否则,会发生栈内存溢出错误;
“StackOverflow Error”原因:一直压栈,没有d栈,内存不够用。
只要内存不够就会报错,所以即使有结束条件也不能一直递归,在实际开发当中中,不能轻易选择递归,尽量用循环语句代替,因为循环效率高,耗费内存少,用递归耗费内存大,容易导致JVM死掉。(但在极少数情况,必须使用递归实现)
递归原理
public class RecursionTest(){ public static void main(String[]args){ int n=3;//1~3的和 int su=sum(n);//接收返回值 System.out.println(su); } public static int sum(int n){//返回int类型的方法 if(n==1){ return 1; }//结束递归条件 return n+sum(n-1);//如果没有结束,继续调用本方法 } }
如何解决递归:
1、检查结束条件是否正确;
2、调整栈帧大小;
DOS命令窗口: ”java -X“可以查看Java堆栈大小的一些设置命令
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)