zoukankan      html  css  js  c++  java
  • JAVA对象的初始化过程

    package xiya;
    
    class Person{
    	private String name;
    	private int age;
    	private static String country = "CN";
    	
    	//静态代码块初始化类
    	static
    	{
    		System.out.println("首先被执行");
    	}
    	
    	//构造代码块初始化对象
    	{
    		System.out.println("其次被执行");
    	}
    	
    	public int getAge() {
    		return age;
    	}
    	
    	public String getName() {
    		return name;
    	}
    	
    	public void setAge(int age) {
    		this.age = age;
    	}
    	
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public Person(String name, int age) {
    		System.out.println("最后被执行");
    		this.name = name;
    		this.age = age;
    	}
    	
    	public static String getCountry() {
    		return country;
    	}
    }
    
    public class Demo {
    	public static void main(String[] args) {
    		Person p = new Person("xiya", 20);
    		System.out.println(p.getName() + " " + p.getAge() + " " + p.getCountry());
    	}
    }

    Person p = new Person("xiya", 20);
    过程:

    1. 因为new用到了Person.class,所以先找到Person.class文件并加载到内存。
    2. 执行该类的static代码块(如果有的话),给Person类进行初始化。
    3. 在堆内存中开辟空间,分配内存地址。
    4. 在堆内存中建立对象的特有属性(成员变量),并进行默认初始化。
    5. 对属性进行显示初始化。
    6. 对对象进行构造代码块初始化。
    7. 对对象进行对应的构造函数初始化。
    8. 将内存地址传给栈内存中的p变量。


    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    Socket网络编程--简单Web服务器(4)
    GCC学习笔记
    字符分隔符'1'(u0001)的困惑
    g++编译时遇到问题undefined reference to
    ROS学习笔记(三)
    cJSON笔记
    ROS学习笔记(二)
    ROS学习笔记(一)
    ffmpeg推流方式采用TCP协议
    Android OS的image文件组成
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/5834726.html
Copyright © 2011-2022 走看看