java语言中的成员变量与方法调用的内存分析
一、成员变量
1、变量的分类
(1)成员变量
实例变量:没有static修饰,也叫对象属性,属于某个对象,通过对象调用来使用。声明在类中,方法外。
静态变量:有static修饰,也叫类变量,属于整个类的,不是属于某个实例。声明在类中,方法外。
(2)局部变量:在方法体{}中或方法的形参列表、代码块中。
2、成员变量的声明
【修饰符】 class 类名{
【修饰符】 数据类型 属性名; //属性有默认值
【修饰符】 数据类型 属性名 = 值; //属性有初始值
}
例:创建一个Chinese的类,声明静态变量country,公有变量name和公有变量gander。
class Chinese{
static String country;
public String name;
public char gender;
}
二、成员方法
1、成员方法的概念
方法也叫函数,是一个独立功能的定义,是一个类中最基本的功能单元。
2、成员方法的分类
(1)实例方法:没有static修饰的方法,必须通过实例对象来调用。
(2)静态方法:有static修饰的方法,也叫类方法,可以由类名来调用。
3、成员方法的声明
【修饰符】 返回值类型 方法名(【参数列表:参数类型1 参数名1,参数类型2 参数名2, ...... 】){
方法体;
【return 返回值;】
}
三、成员变量及成员方法的内存分析
- 一个类的创建就会在硬盘中生成一个 .class 文件,通过类加载器将 . class文件读取到内存的方法区中。其中包含有静态属性的内存分配,普通属性的签名,所有方法的签名。
- 方法不调用不执行,调用一次执行一次,每次调用会在栈中有一个入栈动作,即给当前方法开辟一块独立的内存区域,用于存储当前方法的局部变量的值,当方法执行结束后,会释放该内存,称为出栈,如果方法有返回值,就会把结果返回调用处,如果没有返回值,就直接结束,回到调用处继续执行下一条指令。
- 栈结构:先进后出,后进先出。
1、创建一个 Student 类。
/*
创建一个学生类
*/
public class Student {
public String stuName;
public int stuAge;
public void sayHello(){
System.out.println("你好");
}
}
2、创建一个 TestStudent 测试类。
public class TestStudent {
public static void main(String[] args) {
Student stu1 = new Student();
stu1.stuName = "Tom";
stu1.stuAge = 20;
stu1.sayHello(); //调用
Student stu = new Student();
stu.stuName = "Jerry";
stu.stuAge = 21;
}
}
详细内存结构图如下: