ad

《JAVA服务端研发知识图谱》_让你更懂Java后台研发_1.4.3 初始化

admin 155 2023-10-25

【摘要】 本书摘自《JAVA服务端研发知识图谱》一书中第1章,第4节,由何为、迟文恒 编著。

1.4.3 初始化

对象的初始化是通过构造器实现的,构造器就是与类名相同并且没有返回值的那个方法。 如果一个类没有明确地编写构造器,那么编译器会默认生成一个构造器。构造器可以有多个,每 个构造器的参数列表不同。下面针对Student类编写它的构造器。

public Student(int age,String name){

《JAVA服务端研发知识图谱》_让你更懂Java后台研发_1.4.3 初始化

this.age = age;

this.name =name;

public Student()

this.age=0;

this.name="todo";

}

如果只写上面带参数的构造器,那么之前编写的代码无法正确编译,因为默认的构造器没 有自动生成,而之前的代码都是通过默认构造器创建的对象,所以必须添加无参数的构造器。 添加Student的构造器后,可以修改School类的 addStudent方法为:

public void addStudent(int age,String name){

Student student = new Student(age,name);

addStudent(student);

/*Student student =new Student();

student.setAge(age);

student.setName(name);*/

//addStudent(student)

这种调用构造器创建对象的方法会使代码更简洁,同时也保证程序的健壮,否则对象中的 字段没有正确初始化,会在不可知的地方发生问题。同时也注意到,之前的代码用/*、*/和//框 起来了,/*和*/可以使其中间的代码失效,//可以使它后面的代码失效。通常用它们注释无用代 码或者添加说明性文字。

除了构造器的方式,也有其他的方法初始化字段的值,例如直接在声明字段的时候赋值, 或者通过初始化代码块来进行赋值。下面演示这两种写法。

public class Student {

private int age=18;

private String name ="todo";

public Student(){

//this.age=0;

//this.name="todo";

public static void main(String[] args){

Student student =new Student();

/student.setAge(12);

//student.setName("xiaoming");

System.out.println("student age ="+student getAge();

System.out.println("student name ="+student.getName());;

运行结果如下:

student age =18

student name =todo

以上截取了部分 Student 类修改后的写法,由输出可见字段被设置了初始值。下面添加初始 化块,再执行main 方法观察字段值最后的输出结果。

public class Student {

private int age=18;

private String name ="todo";

{

age=20;

name ="Construct";

运行结果如下:

student age=20

student name = Construct

最后的输出结果是初始化块中赋值的结果,这里涉及了一个初始化顺序的问题,最后赋值 的结果才会被打印出来,所以可知初始化块的执行时间晚于变量声明时赋值的时间。

在目前已经介绍的内容中,初始化顺序先是变量声明时的赋值,然后是初始化块,最后是 构造器。对于一个普通的类,这个顺序是一定的,但是当引入静态和继承之后,会在这个顺序 的基础上插入其他步骤。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《认知计算与深度学习》_基于物联网云平台的智能应用_2.2 虚拟机和Docker容器的创建
下一篇:《给所有人的Python》_第四版_也是给你的一本知识宝典_2.3.2 字符串的连接
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×