1.
public class Hello
{
public static void main(String args[])
{
new Hello(3L);
}
public Hello(long x)
{
this(int x);
System.out.println("a");
}
public Hello(int x)
{
this();
System.out.println("b");
}
public Hello()
{
System.out.println("c");
}
}
2.
public class Hello
{
public static void main(String args[])
{
new Hello();
}
public void Hello(long x)
{
System.out.println("a");
}
public void Hello(int x)
{
System.out.println("b");
}
public void Hello()
{
System.out.println("c");
}
}
public class Hello
{
public static void main(String args[])
{
new Hello(3L);
}
public Hello(long x)
{
this(int x);
System.out.println("a");
}
public Hello(int x)
{
this();
System.out.println("b");
}
public Hello()
{
System.out.println("c");
}
}
2.
public class Hello
{
public static void main(String args[])
{
new Hello();
}
public void Hello(long x)
{
System.out.println("a");
}
public void Hello(int x)
{
System.out.println("b");
}
public void Hello()
{
System.out.println("c");
}
}
第一个运行结果是cba
第二个没有运行结果;
谢谢!
public Hello(long x) {
this(int x);
System.out.println("a");
}
这个构造函数,那么里面第一句话是 this(int x); 以此类推吧。第二个运行,是new Hello();这个要求的是 无参数构造,当然只能去调用:
public void Hello() {
System.out.println("c");
}
程序1 有重载的构造函数,而且还有构造函数间的调用(通过this), 但没有成员方法。
程序2 有重载的成员方法,但没有构造函数(默认有一个无参构造函数。)程序2 比较简单,main 函数只调用了默认的构造函数(没有任何语句执行),生成了一个对象。所以什么输出也没有。 那些重载的函数Hello(),都不是构造函数。(这样定义成员函数名也不符合java 规范)。程序1 有3个重载的构造函数,但没有成员函数。
main()函数有一语句new Hello(3L); 程序就会调用相应的构造函数。
public Hello(long x)
{
this(int x);
System.out.println("a");
}在运行这个函数时,有个通过关键字this 调用Hello(int x)构造函数。
public Hello(int x)
{
this();
System.out.println("b");
}在执行此构造函数时,又通过this调用 HellO()这个构造函数。
public void Hello()
{
System.out.println("c");
}这时就执行这个构造函数的语句,输出 c.
执行完后,反回到上一级构造函数接着执行,输出 b.
再返回到上一级,输出a.
程序结束了。
这个程序的调用顺序是不是先是:
public Hello(long x)
{
this(int x);
System.out.println("a");
}
输出 a
然后:
public Hello(int x)
{
this();
System.out.println("b");
输出 b
最后调用:
public Hello()
{
System.out.println("c");
}
输出 c;
可是结果输出为 c b a;请问只是为什么呢
向 new Hello(3L)语句
这个构造函数有个 this(int x);
所以程序去执行 Hello(int x)了,那条输出 a 的语句先不执行。后面也是这样。程序2的编码风格非常不好,一般都是构造函数是和类名一致。
普通成员函数,首字母是小写的,而且最好不要和类名一样。
jdk 1.7 中,第一个编译不过,public Hello(long x){
this(int x);
System.out.println("a");
}有编译错误
改成: this((int)x);就行了。
但是a打不出来。你try一下
b
a
5楼回复的最后一段代码有错.应是:
public Hello()
{
System.out.println("c");
}public void Hello() 不是构造函数了。特此更正一下。