Java类初始化


Java类初始化


 

成员变量的初始化和构造器

  • 如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值
    1. 对于  char、short、byte、int、long、float、double等基本数据类型的变量来说会默认初始化为0(boolean变量默认会被初始化为false)
    2. 对于引用类型的变量,会默认初始化为null
  • 如果类内没有显示的定义构造器,则编译器会自动创建一个无参构造器,但是如果类内显示定义了构造器,则编译器不会再自动创建无参构造器

类初始化的顺序

  • 当程序需要生成一个类对象时,Java执行引擎会先检查是否加载了这个类,如果没有加载,则先执行类的加载再生成对象,如果已经加载,则直接生成对象
  • 在类的加载过程中,类的static成员变量会被初始化,如果类中有static语句块,则会执行static语句块。static成员变量和static语句块的执行顺序同代码中的顺序一致。在Java中,类是按需加载,只有当需要用到这个类的时候,才会加载这个类,并且只会加载一次
public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Person p1 = new Person();
        Person p2 = new Person();
    }

}
class Person {
    static{
        System.out.println("Person");
    }
    public Person(){
        System.out.println("It is a person");
    }
}

//输出
Person
It is a person
It is a person
View Code
  • 在生成对象的过程中,会先初始化对象的成员变量,然后再执行构造器。即类中的变量会在任何方法(包括构造器)调用之前得到初始化
public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Person p = new Person();
    }

}
class Person {
    private Pet p = new Pet(); 
    public Person(){
        System.out.println("It is a person");
    }
}
class Pet {
    public Pet(){
        System.out.println("The person's pet");
    }
}

//输出
The person's pet
It is a person
View Code
原文地址:https://www.cnblogs.com/zhanglei93/p/5749796.html