关于构造函数中的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 ...
随机推荐
- JavaBean是什么
作者:杨博链接:https://www.zhihu.com/question/19773379/answer/31625054来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- HiBench成长笔记——(2) CentOS部署安装HiBench
安装Scala 使用spark-shell命令进入shell模式,查看spark版本和Scala版本: 下载Scala2.10.5 wget https://downloads.lightbend.c ...
- SQL语句利用日志写shell拿权限
outfile被禁止,或者写入文件被拦截: 在数据库中操作如下:(必须是root权限) show variables like '%general%'; #查看配置 set global genera ...
- 清北学堂模拟赛2 T2 ball
题目大意: 多组数据,每组给定n,m,表示将n个小球放进m个箱子,每个小球均有两个箱子(可能相同)可放,求所有小球均放好的方案mod998244353的总数. 思路: 算是我和题解思路肥肠相近的一道题 ...
- matlab练习程序(快速搜索随机树RRT)
RRT快速搜索随机树英文全称Rapid-exploration Random Tree,和PRM类似,也是一种路径规划算法. 和PRM类似,算法也需要随机撒点,不过不同的是,该算法不是全局随机撒点,而 ...
- 014、Java中byte自动转型的操作
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- 无法识别的配置节 system.webServer
Web.config文件里面加入 <configSections> <section name="system.webServer" type="Sys ...
- 配置gem5-gpu docker版
1 安装docker:wget -qO- https://get.docker.com/ | sh,启动服务:sudo service docker start 2 把非root用户添加到docker ...
- UVA 12511/CSU 1120 virus 最长公共上升子序列
第一次接触一个这最长公共上升子序列 不过其实搞清楚了跟最长公共子序列和 最长上升子序列如出一辙 两重循环,对于当前不相等的,等于前一个的值,相等的,等于比当前A[i]小的最大值+1.弄个临时变量记录最 ...
- leeetcode1171 Remove Zero Sum Consecutive Nodes from Linked List
""" Given the head of a linked list, we repeatedly delete consecutive sequences of no ...