Java的初始化
Java对象的初始化
从c开始,就有很多程序因为忘记初始化变量导致出现了错误。此后c++引入了构造器的概念,对变量进行初始化。构造器是一个变量对象时自动调用的一个方法。在Java中也引入了构造器的概念,并且额外的提供了‘垃圾回收器’ 。对于不使用的内存资源,将其自动释放。
在Java中,通过提供构造器来确保每个类的对象都会得到初始化。创建对象时,Java会在用户有能力操作对象之前调用构造器方法。从而保证对象进行了初始化
在Java中,构造器的命名规则是构造器方法必须和类名保持一致。
class Book{ Book(){ System.out.println("这是一本书"); } public static void main(String[] args){ Book book = new Book(); } }
当使用new Book()创建对象时,Java就会自动调用Book()这个构造器方法,由此来确保对对象操作之前,已经初始化了。因为构造器方法必须和类名保持一致,所以不适用于方法的首字母小写
当然一般来说构造器无需程序员来进行编写,除非在初始化时需要进行特殊操作。此时Java会提供一个默认构造器,在Java文档中术语是无参构造器。
构造器也是可以接受参数的。例如:
class Book(){ Book(int i){ System.out.println("我创建了"+i+"本书"); } public static void main(String[] args){ Book book = new Book(1); //控制台打印出,我创建了1本书 } }
如果你编写了构造器,就不会有默认的无参构造器了。如果需要你可以重载一个,构造器方法和普通方法一样,同样适用于重载。
但构造器属于一个特殊的方法,用于初始化,所以不会以后返回值。(new表达式是返回对象的引用,但这不是构造器方法返回的)
对象的内部变量的初始化
对象内部变量的初始化,如果是基本数据类型,例如int char double boolean等。这些数据类型会被初始化为默认值0或false。如果是对象,默认值是null(String属于对象,不属于基本数据类型)
初始化顺序基于类在编写是定义时的顺序,而且即使在方法后也会先于方法初始化(包括构造方法)。因为不能保证方法内部会不会调用这些变量。
class Book{ int i; Book(){ System.out.println("i=" + i); System.out.println("b=" + b); } boolean b; void p(){ System.out.println("b=" + b); } public static void main(String[] args){ Book book = new Book(); /** *此时会打印出 i=0(换行) *b=false */ } }