package d;class TestClass{
private String message;
public  TestClass(String message){this.message=message;}
public TestClass method () { return this;}
public String toString(){ return message;}
}public class TestClassApp {
public static void main(String[]args){
       TestClass myObj = new TestClass("Java");
       TestClass yourObj = new TestClass("OOP");
       System.out.println(myObj.method().toString() );
           System.out.println(yourObj.method().toString());
}
}
运行结果是 Java 
           OOP
 我想知道TestClass myObj = new TestClass("Java")TestClass yourObj = new TestClass("OOP");是干什么用的 这个程序没有调用TestClass(String message)这个函数啊 最后怎么还能调用toSring()输出message呢 

解决方案 »

  1.   

    TestClass(String message)是构造函数,在new对象的时候会调用。既然楼主new了两个对象myObj和yourObj,怎么说是没有调用这个函数呢!
      

  2.   


    +1
    public TestClass(String message){this.message=message;} 是构造函数。
    new TestClass("OOP");是调用public TestClass(String message){this.message=message;} 实现的。
      

  3.   

    那个new()不是用的类名么 类名本身不就有个构造函数么 跟TestClass(String message)什么关系 怎么是用new就调用了这个函数呢
      

  4.   

    在不写构造函数时,系统会默认一个无参数的构造函数,就是你所说的本身的构造函数当你写了一个有参数的构造函数时,那个默认的构造函数就没有了,以后new对象时必须填入参数才能new!!!
      

  5.   

    这是java函数的基础啊,构造方法,顾名思义就是在构造函数时调用的方法,构造方法和类名是相同的。
      

  6.   


    构造函数是可以重载的。
    如果类的定义没有任何显示声明的构造函数,则会(自动)有一个默认的构造函数(不带任何参数,就是你理解的那个“类名本身就有一个构造函数”),否则按定义的构造函数来。
    new TestClass("java") 对应构造函数原型为TestClass(String )如果你的TestClass改为class TestClass{
    private String message;
    public TestClass(){}//默认构造方法(构造函数)
    public TestClass(String message){this.message=message;}
    public TestClass method () { return this;}
    public String toString(){ return message;}
    }而且用 TestClass tc = new TestClass();
    这时就会调用默认构造,也就是public TestClass(){}如果改为
    class TestClass{
    private String message;
    public TestClass method () { return this;}
    public String toString(){ return message;}
    }也一样。