A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 18037039769 于 2019-2-24 11:07 编辑

首先需要明白以下几点:

栈空间(stack),连续的存储空间,遵循后进先出的原则,用于存放局部变量。
堆空间(heap),不连续的空间,用于存放new出的对象,或者说是类的实例。
方法区(method),方法区在堆空间内,用于存放①类的代码信息;②静态变量和方法;③常量池(字符串敞亮等,具有共享机制)。
Java中除了基本数据类型,其他的均是引用类型,包括类、数组等等。
数据类型的默认值
基本数据类型默认值:
数值型:0
浮点型:0.0
布尔型:false
字符型:\u0000
引用类型:null
变量初始化
成员变量可不初始化,系统会自动初始化;
局部变量必须由程序员显式初始化,系统不会自动初始化。
实例进行分析
创建类
分别是Student、Computer、Test,代码如下:
[Java] 纯文本查看 复制代码
public class Student {

        int score;
        int age;
        String name;

        Computer computer;

        public void study() {

                System.out.println("studying...");
        }
}

[Java] 纯文本查看 复制代码
public class Computer {
        int price;
        String brand;
}

[Java] 纯文本查看 复制代码
public class Test {

        public static void main(String[] args) {

                Student stu = new Student();

                stu.name = "xiaoming";

                stu.age = 10;

                stu.study();

                Computer c = new Computer();
                c.brand = "Hasse";

                System.out.println(c.brand);

                stu.computer = c;
                System.out.println(stu.computer.brand);

//                System.out.println("----------------------------------------");
//
//                c.brand = "Dell";
//
//                System.out.println(c.brand);
//                System.out.println(stu.computer.brand);
//
//                System.out.println(stu.computer.brand == c.brand);

        }

}

代码分析
我们知道,程序的入口是main(),因而从main方法从上到下、从左到右进行分析。

Student stu = new Student();
①首先,Java虚拟机(JVM)去方法区寻找是否有Test类的代码信息,如果存在,直接调用。如果没有,通过类加载器(ClassLoader)把.class字节码加载到内存中,并把静态变量和方法、常量池加载(“xiaoming”、“Hasse”)。
②走到Student,以同样的逻辑对Student类进行加载;静态成员;常量池(“studying”)。
③走到stu,stu在main方法内部,因而是局部变量,存放在栈空间中。
④走到new Student,new出的对象(实例),存放在堆空间中,以方法区的类信息为模板创建实例。
⑤‘’=‘’赋值操作,把new Student的地址告诉stu变量,stu通过四字节的地址(十六进制),引用该实例。
如下图:

20171114103423173.png (122.7 KB, 下载次数: 26)

20171114103423173.png

20171114103931438.png (132.59 KB, 下载次数: 13)

20171114103931438.png

20171114102224911 (1).png (116.39 KB, 下载次数: 21)

20171114102224911 (1).png

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马