对象的初始化是通过构造器实现的,构造器就是与类名相同并且没有返回值的那个方法。如果一个类没有明确地编写构造器,那么编译器会默认生成一个构造器。构造器可以有多个,每个构造器的参数列表不同。下面针对Student类编写它的构造器。
如果只写上面带参数的构造器,那么之前编写的代码无法正确编译,因为默认的构造器没有自动生成,而之前的代码都是通过默认构造器创建的对象,所以必须添加无参数的构造器。添加Student的构造器后,可以修改School类的addStudent方法为:
这种调用构造器创建对象的方法会使代码更简洁,同时也保证程序的健壮,否则对象中的字段没有正确初始化,会在不可知的地方发生问题。同时也注意到,之前的代码用/*、*/和//框起来了,/*和*/可以使其中间的代码失效,//可以使它后面的代码失效。通常用它们注释无用代码或者添加说明性文字。
除了构造器的方式,也有其他的方法初始化字段的值,例如直接在声明字段的时候赋值,或者通过初始化代码块来进行赋值。下面演示这两种写法。
㊀本书在代码段中可能会包含“…”这样的内容,这是表示在书中省略了部分已介绍代码或者get、set方法,如果要查看“…”表示的实际内容,可以查看本书附带的工程源码。
运行结果如下:
student age=18
student name=todo(www.xing528.com)
以上截取了部分Student类修改后的写法,由输出可见字段被设置了初始值。下面添加初始化块,再执行main方法观察字段值最后的输出结果。
运行结果如下:
student age=20
student name=Construct
最后的输出结果是初始化块中赋值的结果,这里涉及了一个初始化顺序的问题,最后赋值的结果才会被打印出来,所以可知初始化块的执行时间晚于变量声明时赋值的时间。
在目前已经介绍的内容中,初始化顺序先是变量声明时的赋值,然后是初始化块,最后是构造器。对于一个普通的类,这个顺序是一定的,但是当引入静态和继承之后,会在这个顺序的基础上插入其他步骤。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。