public class main {
public static void main(String[] args) {
test a = new test("main");
printf(a);
}
public static void printf(Object obj)
{
System.out.println(obj);
}
}
class test
{
public String b = "test";
test(){}
test(String a)
{
this.b = a;
}
        public String toString()
{
return this.b;
}}听老师说如果是直接打印对象的话,是要看toString()函数的但是我在api那边
找的时候,找不到原因求解
import java.awt.*;
import java.awt.event.*;
public class TankWarMain
{
public static void main(String[] args) {
TankWarWindow window = new TankWarWindow();
}
}
class TankWarWindow extends Frame
{
public void paint(Graphics g)
{
Color c = g.getColor();
g.setColor(Color.RED);
g.fillOval(50, 50, 30, 30);
g.setColor(c);
}
TankWarWindow()
{
initWindow();
event();
}
public void initWindow()
{
this.setBounds(200, 100, 800, 500);
this.setResizable(false);
this.setTitle("TankWar");
this.setVisible(true);
}
public void event()
{
this.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
老师说,在完成构造函数的时候,系统是自动调用paint()函数的
但是我在api那里转来转去都转不到答案
纠结了一个晚上了

解决方案 »

  1.   

    不知道你现在解决了没有,
    toString()是object类的一个方法,所有的类都默认继承Object类,所以这个方法也就继承了下来,
    直接打印对象时,其实就打印的就是obj.toString();只有在当前类中重写toString()这个方法,才可以输出对象有用的信息。
    你们老师说的调用构造函数 其实就是对象实例化,你说的print()自动调用的确实没听说过。
      

  2.   

    简单写了个,你看看是这样的么?/** 测试构造函数.
     * 
     * @author Ruidong_pu
     * @version 1.1 2013.1.10
     */class Tests {

    private String name;//定义姓名
    private String pwd;//定义密码

    public Tests(){} //无参构造函数

    /**
     * 有参构造函数
     * @param name
     * @param pwd
     * @return 输出字符串.
     */

    public Tests (String name,String pwd){
    setName(name);
    setPwd(pwd);
    toString();//在这个地方调用toString()方法,即可输出.[toString方法已经重写.]
    }

    /** 用户名.
     * set/get
     * @param name
     */
    public void setName(String name){
    this.name=name;
    }

    public String getName(){
    return name;
    }

    /** 密码
     * set/get
     * @param pwd
     */

    public void setPwd(String pwd){
    this.pwd=pwd;
    }

    public String getPwd(){
    return pwd;
    }

    /**
     * 重写toString方法.
     * @return 修改后的字符串
     */

    @Override
    public String toString() {
    // TODO Auto-generated method stub
    return "这个用户的用户名是>>>"+getName()+"这个用户的密码是>>>"+getPwd();
    }

    }
    public class TestTop {


    /**
     * 通过有参构造函数初始化类Testsk12.
     * @return Tests的实例.
     */

    public Tests Test(){
    Tests test = new Tests("小明","123");
    return test;
    }
    public static void main(String []args) {
    // TODO Auto-generated method stu
    TestTop t =new TestTop();
    System.out.println(t.Test());
    }
    }
      

  3.   

    我也不知道为啥会自动调用paint方法,只知道他继承了windows类,window类又继承了Container,Container有继承了Component,还有,Container的update方法调用了paint,但是不知道哪里调用了update,无从找起
      

  4.   


    其实我知道打印的就是obj.toString();但是我想从api那里找到答案
    因为怎么说呢??
    我们本身就要学习它的嘛,那它到底暗地里帮我做了什么或者它的默认做法是什么呢??
    这个obj.toString()是我们本身就知道它默认是从这里打印的,但是那是我们本来就知道的了,
    或者别人告诉的,或者百度得来的,但是api上面都找不到说明吖??
    或许这个我们能自己测试调试得出它的结论是对的,但是如果是其它的问题呢??
    那我们是不是又要重新证明或者弄明白它的默认??
    其实我只是找个官方点的说法或者介绍。。
    说得好乱,希望能明白,本人语文水平低,请不要介意
      

  5.   

    其实这个我是知道的,但是我想知道为什么api文档上没有说明(或许我找不到)
      

  6.   


    按照规律api里面不会写这个》。。因为我也没看见过
      

  7.   

    你查下api中的object类 看他的方法,谁让他是隐式父类呢
      

  8.   

    有些东西抠得太深,就是钻牛角尖了。企业开发谁还管你API的内部是怎么操作,只要你会用,能完成工作就是好员工。难道楼主要把java钻研透了自己再开发个语言出来?