[修饰符列表] 返回值类型 方法名(形参列表){ 方法体 }
修饰符:可选的,告诉编译器如何调用该方法,定义了该方法的访问类型
返回值类型:根据需要返回的数据类型进行定义,有的方法无返回值则用关键字void;
方法名:即方法的名字,名字和形参列表共同构成方法名;
方法体:定义该方法的功能。
调用方法:对象名.方法名(形参列表)(当方法在同一类中也可以直接使用方法名(形参列表))
JVM主要的三个内存空间:栈(stack)、堆、方法区;
方法区(类加载器(class loader)):将硬盘的xxx.class字码文件装载到JVM的时候,会将字节码文件存放到方法区中,也就是说方法区中存储的是代码片段。因为类加载器,方法区中最先有数据。
栈:在方法被调用时,该方法的内存空间需要在栈中被分配。方法调用叫做压栈,分配空间;方法结束叫做弹栈,释放空间。
Java中允许方法名相同,但需要参数列表不同,否则编译器会报错。
在Java语法中的区分方式:
Java虚拟机通过方法名区分;
方法名相同时通过方法的参数类型进行区分
什么时候使用方法重载?
在同一个类,如果"功能1"和“功能2”功能相似时,可以方法名一致。
方法重载的发生条件:
在同一个类中
方法名相同
参数列表不同(参数个数不同时算不同、参数类型不同时算不同、参数顺序不同时算不同)
方法重载和返回值类型无关、方法重载和修饰符类型无关。
方法自己调用自己;
当递归时程序没有结束文件,一定会发生栈内存溢出错误(StackOverflowError),所以递归必须要有结束条件;
结束条件对的,但也有可能出现内存溢出错误,大多数情况还是循环好,但是极少数情况下不使用方法递归程序是无法运行的;
当遇到内存溢出错误时怎么办:首先查看递归的结束条件对不对,其次递归条件问题时,需要手动扩大JVM的栈内存大小,(java -x)可查看调整堆栈大小的参数。