当前位置: 技术问答>java相关
一个JBuilder常用者的疑感
来源: 互联网 发布时间:2015-09-23
本文导语: 为什么在产生的代码中总是有两个构造函数? 一个有参数而一个如,比如一个JFrame中如下的构造函数 public dialog_jinhuodan(Frame frame, String title, boolean modal) { super(frame, title, modal); try { jbIni...
为什么在产生的代码中总是有两个构造函数?
一个有参数而一个如,比如一个JFrame中如下的构造函数
public dialog_jinhuodan(Frame frame, String title, boolean modal) {
super(frame, title, modal);
try {
jbInit();
pack();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
this.setLocation((8), (screenSize.height - frameSize.height) / 8);
}
catch(Exception ex) {
ex.printStackTrace();
}
}
public dialog_jinhuodan() {
this(null, "", false);
}
一个有参数而一个如,比如一个JFrame中如下的构造函数
public dialog_jinhuodan(Frame frame, String title, boolean modal) {
super(frame, title, modal);
try {
jbInit();
pack();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = this.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
this.setLocation((8), (screenSize.height - frameSize.height) / 8);
}
catch(Exception ex) {
ex.printStackTrace();
}
}
public dialog_jinhuodan() {
this(null, "", false);
}
|
多个构造函数没什么奇怪的
这体现了 Java 的多态性
这体现了 Java 的多态性
|
第二个调用了第一个
Java不像C++那样支持缺省参数
比如C++里
void find(String name, int age=4)
你可以这样用
find("F", 5);
也可以这样用
find("F");他就相当于find("F", 4);
这里因为函数签名的原因,导致和重载有点小摩擦
比如说,你重载了一个
find(String name)
那么,你调用find("F")的话,编译器怎么知道你是
想要find("F", 4);
还是你重载的那个find("F")?
Java虽然不像C++那样灵活
但是比C++简单,为了避免缺省参数和重载的冲突
Java干脆不支持缺省参数
Java不像C++那样支持缺省参数
比如C++里
void find(String name, int age=4)
你可以这样用
find("F", 5);
也可以这样用
find("F");他就相当于find("F", 4);
这里因为函数签名的原因,导致和重载有点小摩擦
比如说,你重载了一个
find(String name)
那么,你调用find("F")的话,编译器怎么知道你是
想要find("F", 4);
还是你重载的那个find("F")?
Java虽然不像C++那样灵活
但是比C++简单,为了避免缺省参数和重载的冲突
Java干脆不支持缺省参数
|
当你的类声明中没有包含任何构造器时候,编译器自动生成一个没有参数也不完成什么操作的默认构造器。
如果已经声明了一个具有一个或多个参数的构造器,除非明确定义否则不会生成默认的没有参数的构造器。
当对象被创建时,构造器调用是一个连接起来的调用序列,使对象的每个父类的构造器都会被调用。父类的构造器首先执行,以便子类可以访问父类的成员,而且可以保证在他们的构造器中定义的任何初始化工作都被执行。
除非你用super保留字和所需要的参数表来显式调用另外一个构造器,否则调用的是超类的无参数构造器的隐式调用。将出现
No-Argument Constructor not Found in Superclass
如果已经声明了一个具有一个或多个参数的构造器,除非明确定义否则不会生成默认的没有参数的构造器。
当对象被创建时,构造器调用是一个连接起来的调用序列,使对象的每个父类的构造器都会被调用。父类的构造器首先执行,以便子类可以访问父类的成员,而且可以保证在他们的构造器中定义的任何初始化工作都被执行。
除非你用super保留字和所需要的参数表来显式调用另外一个构造器,否则调用的是超类的无参数构造器的隐式调用。将出现
No-Argument Constructor not Found in Superclass
|
这样一来该类的子类就不需要显式的定义构造函数了。我觉得这是原因之一。拙见。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。