[JAVA基础] 了解构造器Constructor

您所在的位置:网站首页 java中构造器和构造方法一样吗 [JAVA基础] 了解构造器Constructor

[JAVA基础] 了解构造器Constructor

2024-07-09 00:25| 来源: 网络整理| 查看: 265

Person p1 = new Person(“张三”, 18);

System.out.println(“两个参数的构造器初始化结果为:”);

System.out.println(“姓名:” + p1.name);

System.out.println(“身份证号:” + p1.idNum);

System.out.println(“年龄:” + p1.age);

// 调用三个参数的构造器

Person p2 = new Person(“李四”, “6666666”, 20);

System.out.println(“三个参数的构造器初始化结果为:”);

System.out.println(“姓名:” + p2.name);

System.out.println(“身份证号:” + p2.idNum);

System.out.println(“年龄:” + p2.age);

}

}

class Person {

String name;

String idNum;

int age;

// 有两个参数的构造器

Person(String myName, int myAge) {

this.name = myName;

this.age = myAge;

}

// 有三个参数的构造器

Person(String myName, String myIdNum, int myAge) {

// 通过this调用两个参数的构造器

this(myName, myAge);

this.idNum = myIdNum;

}

}

输出结果为:

两个参数的构造器初始化结果为:

姓名:张三

身份证号:null

年龄:18

三个参数的构造器初始化结果为:

姓名:李四

身份证号:6666666

年龄:20

通过this调用有一点需要注意:

使用this调用另一个重载的构造器只能在构造器中使用,且必须作为构造器执行体的第一条语句

可能有人会问:如果在有三个参数的构造器里面不用this指针,而是直接把上一个构造器的代码复制过来不行吗?

当然可以,但是不建议;我们得知道为什么要存在this这个调用构造器的方法,它不是无缘无故存在的;在软件开发时有一个原则:不要把相同代码重复写两次以上;因为一旦一个构造器内的初始代码需要修改,那么很有可能其他的构造器初始代码也要跟着修改,如果构造版本多的话是非常麻烦的;而使用this恰恰可以避免这个问题,只需要修改一个地方,其他几个构造器就随着更改了;这样的代码不仅更加简洁,而且降低了维护成本;

子类构造器调用父类构造器

继承有一个规则是:当继承发生后,子类不会获得父类的构造器;

但是子类的构造器可以通过一定方法区调用父类构造器,类似于通过this引用调用重载的构造器;

而子类构造器调用父类的构造器不用this关键字,这里有一个新的关键字:super

super和this用法差不多,使用它就可以实现子类构造器调用父类的构造器;

看个代码就明白了:

测试代码:

class Person {

String name;

int age;

// 父类的构造函数

Person(String myName, int myAge) {

this.name = myName;

this.age = myAge;

}

}

public class Kids extends Person{

String school;

// 子类的构造函数

Kids(String myName, int myAge, String mySchool) {

// 通过super来调用父类构造器初始化过程

super(myName, myAge);

this.school = mySchool;

}

public static void main(String[] args) {

Kids k = new Kids(“张三”, 5, “奥特曼小学”);

System.out.println(“name:” + k.name);

System.out.println(“age:” + k.age);

System.out.println(“school:” + k.school);

}

}

输出结果为:

name:张三

age:5

school:奥特曼小学

通过代码可以看出来super确实和this非常像,无非就是super调用父类构造器,this调用同一个类的重载的构造器;

且使用super也需要注意:

super调用父类构造器也必须在子类构造器执行体的第一行,所以this和super不会同时出现;

构造器的调用顺序

这里先看一个代码:

class Creature {

Creature() {

System.out.println(“Creature的无参构造器的调用”);

}

}

class Person extends Creature {

Person(String name) {

System.out.println(“Person的一个参数构造器的调用”);

}

Person(String name, int age) {

// this调用同一个类中重载的构造器

this(name);

System.out.println(“Person的两个参数构造器的调用”);

}

}

public class Kids02 extends Person {

Kids02() {

// 显式调用父类的两个参数的构造器

super(“张三”, 18);

System.out.println(“Kids02的无参构造器的调用”);

}

public static void main(String[] args) {

// 创建一个Kids02对象

new Kids02();

}

}

这个代码中,Person类继承了Creature类,Kids02类继承了Person类,Perosn类中又通过this调用同一个类中重载的构造器,

Kids02类中用super 显式调用父类的两个参数的构造器;

那么输出是什么呢?到底先调用的是谁的构造器,最后调用的谁的构造器?

输出如下:

Creature的无参构造器的调用

Person的一个参数构造器的调用

Person的两个参数构造器的调用

Kids02的无参构造器的调用

通过这个代码和结果,可以总结出来,父类构造器总在子类构造器之前执行,或者可以说:

创建任何对象总是从该类所在继承树最顶层类的构造器开始执行的,然后依次向下执行;

对于this和super也是一样;

这个代码好好理解一下,就会对构造器间的关系体会更深; 自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img 最后

面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典

Java核心知识整理

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

Java核心知识

Spring全家桶(实战系列)

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

其他电子书资料

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

2020年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多 《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取! 子书资料

[外链图片转存中…(img-UfVBrMZZ-1712697155143)]

Step3:刷题

既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。

以下是我私藏的面试题库:

[外链图片转存中…(img-h1ngBlSB-1712697155143)] 《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3