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

  • 相关阅读:
    ‘Host’ is not allowed to connect to this mysql server
    centos7安装mysql
    further configuration avilable 不见了
    Dynamic Web Module 3.0 requires Java 1.6 or newer
    hadoop启动 datanode的live node为0
    ssh远程访问失败 Centos7
    Linux 下的各种环境安装
    Centos7 安装 python2.7
    安装scala
    Centos7 安装 jdk 1.8
  • 原文地址:https://www.cnblogs.com/cnki/p/9388346.html
Copyright © 2011-2022 走看看