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
- 在生成对象的过程中,会先初始化对象的成员变量,然后再执行构造器。即类中的变量会在任何方法(包括构造器)调用之前得到初始化
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