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");
}
}

解决方案 »

  1.   

    你运行一下看!就是用this调用构造方法!
      

  2.   

    我不明白这个函数的构造,使用方法,以及用途;
    第一个运行结果是cba
    第二个没有运行结果;
    谢谢!
      

  3.   

    第一个运行,核心在于: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");
    }
      

  4.   

    这两个程序区别还是很大的. 主要体现在:
    程序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.
    程序结束了。
      

  5.   

    谢谢,有点眉目了,但是,
    这个程序的调用顺序是不是先是:
    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;请问只是为什么呢
      

  6.   

    不是如楼主所说,有this 调用时,本级构造函数的其他语句都先不执行,最后返回时才执行。
    向 new Hello(3L)语句
    这个构造函数有个 this(int x);
    所以程序去执行 Hello(int x)了,那条输出 a 的语句先不执行。后面也是这样。程序2的编码风格非常不好,一般都是构造函数是和类名一致。
    普通成员函数,首字母是小写的,而且最好不要和类名一样。
      

  7.   


    jdk 1.7 中,第一个编译不过,public Hello(long x){
    this(int x);
    System.out.println("a");
    }有编译错误
      

  8.   

    不会呀,我的jdk6.0运行没问题呀,
      

  9.   

    把this(int x);
    改成: this((int)x);就行了。
      

  10.   


    但是a打不出来。你try一下
      

  11.   

    没问题的.输出c
    b
    a
      

  12.   

    是  jdk 1.7
    5楼回复的最后一段代码有错.应是:
    public Hello()
    {
    System.out.println("c");
    }public void Hello()  不是构造函数了。特此更正一下。