日期:2014-05-20  浏览次数:20702 次

求助,这个程序是什么意思呢!有什么区别呢
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");
}
}

------解决方案--------------------
第一个运行,核心在于:new Hello(3L);中的3L是什么意思,3L就是告诉Java,这个常量是long类型,那么自然就会去调用:
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); 程序就会调用相应的构造函数。
Java code
public Hello(long x)
{
this(int x);
System.out.println("a");
}

------解决方案--------------------
不是如楼主所说,有this 调用时,本级构造函数的其他语句都先不执行,最后返回时才执行。
向 new Hello(3L)语句
这个构造函数有个 this(int x);
所以程序去执行 Hello(int x)了,那条输出 a 的语句先不执行。后面也是这样。

程序2的编码风格非常不好,一般都是构造函数是和类名一致。
普通成员函数,首字母是小写的,而且最好不要和类名一样。