- 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
来源: http://www.bubuko.com/infodetail-2706010.html