zoukankan      html  css  js  c++  java
  • Java面试题(3)Java new一个对象的过程中发生了什么

    序言

    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 + "]";
        }
    }
    View Code

     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

  • 相关阅读:
    IP地址查询接口
    Windows2008防火墙封ip
    UI设计原则
    iis7.5中使用fastcgi方式配置php5.6.5
    serv-u设置被动模式注意的问题
    mysql函数计算地表两点间距离
    vs2012出现无法启动iis express web 服务器的错误
    基于jquery的表单校验插件
    基于jquery的表单校验插件
    php redis 负载均衡[转]
  • 原文地址:https://www.cnblogs.com/cnki/p/9388346.html
Copyright © 2011-2022 走看看