Java - 方法
什么是java中的方法?
- 方法就是一段代码片段,并且这段代码可以完成某个特定的功能、动作、是可以被重复的使用。
- 方法就是类的一个动作。
- 方法在C语言中也叫做函数 或 function。
- 方法定义在类体当中,在一个类中可以定义多个方法,方法的编写位置没有先后顺序,可以随意。
- 方法体当中不能再定义方法。
方法的语法结构
-[修饰符列表] 返回值类型 方法名 (形式参数列表){
方法体;
}
public int sumInt (int a,int b) {
int c=a+b;
return c;
}
## 调用方法
- 静态方法(static修饰) 类名.方法名(实参列表1,2);
- sum = sumInt (a , b);
- 当两个方法在同一个类体中时, “类体.” 可以省略不写。
- return 出现在返回值为void 的方法当中,主要是为了用来结束当前方法。
- 非静态方法必须new对象之后才能调用
## 实例
class MethodTest {
public static void main(String[] args){
// 调用静态方法
int a=3,b=10,c,d;
c=ScannerTest.minus(a,b);
//调用非静态方法
ScannerTest st=new ScannerTest();
d=st.sumInt(a,b);
//输出调用结果
System.out.println("静态方法调用结果:"+c);
System.out.println("非静态方法调用结果:"+d);
}
//静态方法
public static int minus(int a,int b){
int c;
c=a-b;
return c;
}
//非静态方法
public int sumInt(int a,int b){
int c;
c=a+b;
return c;
}
}
## 方法在执行过程中,在JVM中的内存是如何分配的?
1. 当方法只定义不调用,是不会执行的,并且在jvm中也不会给该方法分配运行所属的内存空间。
2. jvm在内存划分上分成这样三块主要的内存空间
* 方法区内存
* 堆内存
* 栈内存
## 关于栈的数据结构
* 栈:stack,是一种数据结构
* 数据结构反应的是数据的存储形态
* 栈帧永远指向栈顶元素,栈顶元素处于活跃状态,其他元素静止。
* 压栈/入栈/push, 弹栈/出栈/pop
* 压栈:给方法分配内存空间, 弹栈:释放该方法的内存空间。
* 栈数据结构存储数据的特点是,先进后出,后进先出。
## 方法代码片段存在哪里?方法执行的时候执行过程的内存在哪里分配?
* 方法代码片段属于class字节码文件的一部分,方法代码片段在类加载的时候,将其存储在方法区内存中,所以JVM中的三块主要内存空间,方法区内存最先有数据,存放了代码片段。
* 方法区内存中只有一份代码片段,但是可以被重复调用,但是每一次调用这个方法的时候,都需要重新分配独立的运行空间此空间需要在栈内存中分配,栈内存中分配方法运行所属的内存空间。
* 方法在调用的时候会给该方法分配独立的内存空间,在栈中分配,此时会发生压栈动作,方法执行结束之后,给该方法分配的内存空间全部释放,此时发生弹栈动作。
* 局部变量在方法体中声明,代码片段存储在方法区内存中,在栈中分配内存空间。