Java类初始化


Java类初始化

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

如果类的成员变量在定义时没有进行显示的初始化赋值,Java会给每个成员变量一个默认值
对于  char、short、byte、int、long、float、double等基本数据类型的变量来说会默认初始化为0(boolean变量默认会被初始化为false)
对于引用类型的变量,会默认初始化为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
 

声明:DungCry.|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - Java类初始化


以此热爱,以此谋生。
Le vent se lève, il faut tenter de vivre