关于构造函数中的this()和super()
今天看到一个这段代码
public DataSourcePool(String driver, String url, String user, String pwd) throws Exception {
this(driver, url, user, pwd, 5);
} public DataSourcePool(String driver, String url, String user, String pwd, int poolSize) throws SQLException, ClassNotFoundException {
this.url = url;
this.user = user;
this.pwd = pwd;
this.poolSize = poolSize;
Class.forName(driver);
init(3);
}
然后突然发现自己忘了构造函数中的this()是干什么用的,虽然凭借原理能够大致推敲出是调用了另外的构造函数,但具体是怎么样的还是手动试了下。
public class Person { private String name;
private Integer age;
private String sex; public Person(String name) {
this.name = name;
} public Person(String name, Integer age, String sex) {
this(name, age);
} public Person(String name, Integer age) {
this.name = name;
this.age = age;
System.out.println("aa");
} public static void main(String[] args) {
Person person = new Person("小明", 17, "男");
System.out.println(person);
System.out.println(person.name);
System.out.println(person.age);
System.out.println(person.sex);
}
main方法中的new Person("小明", 17, "男")按理来说是创建了一个信息为(姓名:“小明”,年龄:17岁,性别“男”)的对象,但输出性别的时候却是null,最后的输出结果是
aa
test.Person@1b6d3586
小明
17
null
而且如下写法是会报错的——Recursive constructor invocation——“递归构造函数调用”的意思,这样进入了死循环
public Person(String name, Integer age, String sex) {
this(name, age, sex);
}
由此可知,在一个构造方法中写this(参数...)方法其实是在调用原本的构造方法时进入this(参数...)这个方法,使用了相对应this(参数...)的构造函数创建了对象。
super()就是调用父类的构造方法了
关于构造函数中的this()和super()的更多相关文章
- 为什么super()和this()调用语句不能同时在一个构造函数中出现的解释
我想这应该是Java构造函数的一种机制吧,首先以子类和父类为例.当你创建一个子类的实例时,首先会调用父类的构造函数,然后再调用子类的构造函数,如果父类中没有缺省构造函数,则必须再子类的构造函数中显示的 ...
- java中的this与super的区别
java中的this与super的区别 1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 代码如下: class Base { Base() { System.out.pr ...
- java中的this和super的作用和异同和C++中调用父类的构造函数
来源于:http://www.cnblogs.com/hasse/p/5023392.html 这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正~ ...
- super在构造函数中的运用
package example;//在子类构造对象时,访问子类构造函数时候,父类也运行.//原因是:在子类的构造函数中第一行有一个默认的隐式语句super();/* 构造函数不能覆盖 子类的实例化过程 ...
- 构造函数中的super和this的使用
super用于调用父类构造函数的部分,其必须出现在构造函数的第一行.super在调用时第一件事就是去执行父类构造函数的部分,所执行的父类构造函数与super()括号中的参数相对应. this用于在一个 ...
- Android中自定义样式与View的构造函数中的第三个参数defStyle的意义
零.序 一.自定义Style 二.在XML中为属性声明属性值 1. 在layout中定义属性 2. 设置Style 3. 通过Theme指定 三.在运行时获取属性值 1. View的第三个构造函数的第 ...
- JAVA 继承中的this和super
学习java时看了不少尚学堂马士兵的视频,还是挺喜欢马士兵的讲课步骤的,二话不说,先做实例,看到的结果才是最实际的,理论神马的全是浮云.只有在实际操作过程中体会理论,在实际操作过程中升华理论才是最关键 ...
- react组件中的constructor和super小知识
react组件中的constructor和super小知识 1.react中用class申明的类一些小知识 如上图:类Child是通过class关键字申明,并且继承于类React. A.Child的类 ...
- Java中的this和super
在Java中有两个非常特殊的变量:this和super,这两个变量在使用前都是不需要声明的.this变量使用在一个成员函数的内部,指向当前对象,当前对象指的是调用当前正在执行方法的那个对象.super ...
随机推荐
- 扩展的Sobel 算子
Custom Extended Sobel Filters https://arxiv.org/pdf/1910.00138.pdf sobel算子是进行边缘检测的一个重要算子.它通常是一个3x3的 ...
- HDU 1024:Max Sum Plus Plus 经典动态规划之最大M子段和
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- php+ajax 实现无限树列表
首先介绍我实现的是xhprof插件的日志转为无限树状图,先看效果图: 废话不多说,直接看代码:(辛辛苦苦敲了好久才搞定,逻辑比较多,新手多揣摩) 控制器: 1 <?php 2 3 namespa ...
- css文字实例锦集
在画布上创建向上的3D拉影文字 <canvas id="myCanvas" width="410" height="130">& ...
- 0-java概述
目录 Java发展历史 java规范 Java三大分支 Java SE学习路径 HelloWorld 1.Java发展历史 - Java出身于sun公司 - sun公司被Oracle公司收购 2.ja ...
- 说说我当初是如何学Linux的
今天我就说说我当初是如何从一名普通桌面维护工程师,通过学习和努力转成Linux运维工程师的,以及作为Linux运维工程师需要一些什么技能和知识,希望可以帮到一些对Linux有兴趣或者想往Linux这个 ...
- knockoutjs 经验总结
http://knockoutjs.com/documentation/introduction.html knockout的模式 MVVM 四大重要概念 声明式绑定UI界面自动刷新依赖跟踪模版 一些 ...
- Percona-Toolkit 之 pt-kill 低效SQL
[root@ tools]#vi ptkill_master.confuser=rootpassword=asd.123port=3306busy-time=5printkill /u01/soft/ ...
- bzoj 1912: [Apio2010]patrol 巡逻
呵呵呵呵呵呵,自己画图,大概半个小时,觉的连上边会成环(是不是该交仙人掌了??)然后求环不重合部分最大就好了, 结果写了一坨DP,最后写不下去了,再次扒了题解. 发现我真的是个sb. k==1,直接是 ...
- 微信小程序添加背景图片的坑
给微信小程序页面加载背景图片解决方案 直接附上原文地址: 给微信小程序页面加载背景图片解决方案 - YUSIR 完美CODING世界 - CSDN博客 https://blog.csdn.net/y ...