码迷,mamicode.com
首页 > 编程语言 > 详细

Java面试题系列(三)Java new一个对象的过程中发生了什么

时间:2018-07-30 01:05:34      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:ati   weixin   ring   main   png   https   return   www.   面试   

Person

class Person{
    private String name;
    private int age;
    
    public Person() {
        super();
    }
 
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }
}

 new

public class NewObjectTest {
    public static void main(String[] args) {
        
        Person p = new Person("张三",18);
        System.out.println(p.toString());
        
    }
 
}

  首先要明确的是在编译完成后,文件夹中会NewObjectTest.class和Person.class两个class文件

  jvm读取main方法入口,发现Person p = new Person("张三",18); 这个需要new新对象的句子(实际并非如此,jvm读取的只是class中的字节码),然后进行以下操作:

技术分享图片

  1. 加载Person.class文件到方法区,同时加载Person类中的static属性

  2. 在main方法所在的栈区分配引用(reference) p;

  3. 在java堆中开辟空间存放Person类,但是不进行初始化操作。

  4. 默认初始化数据

  5. 将引用p指向java中新开辟的Person类

 

 

 

 

 

 

 

https://www.cnblogs.com/JackPn/p/9386182.html

https://blog.csdn.net/weixin_41005192/article/details/80530530

Java面试题系列(三)Java new一个对象的过程中发生了什么

标签:ati   weixin   ring   main   png   https   return   www.   面试   

原文地址:https://www.cnblogs.com/cnki/p/9388346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!