A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© natalie 初级黑马   /  2013-8-9 14:12  /  1230 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public abstract class WeekDay1 {
        private WeekDay1(){}
        
        public final static WeekDay1 SUN = new WeekDay1(){
                public WeekDay1 nextDay() {        
                        return MON;
                }        
        };

        public final static WeekDay1 MON = new WeekDay1(){               
                public WeekDay1 nextDay() {               
                        return SUN;
                }        
        };        
        
        public abstract WeekDay1 nextDay();
        
        public String toString(){
                return this==SUN?"SUN":"MON";
        }
}
public class EnumTest {
        public static void main(String[] args) {
        WeekDay1 weekDay = WeekDay1.MON;
        System.out.println(weekDay.nextDay());//weekDay.nextDay()得到的是对象 但打印的时候却打印出的字符串,调用tostring()方法的原理是什么???都有什么情况会调用他?如果这样写呢weekDay.nextDay().tostring()   
       }
}

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

4 个回复

倒序浏览

楼主请认真看一下哈
  虽然java.lang.Objiect已经提供了toString()方法的实现,但是她所返回的字符串通常不是用户所期望看到的,也就是说他在绝大多数情况下的输出的内容并不能满足我们的要求,没有包含我们所需要的一些内容。
     对于这个通用的toString()方法,他所产生的字符串包含三分小部分:类的名字、一个“@”符号以及一个无符号十六进制的数列码。通常的形式为:Base@12b4c9。所以,这麽少的信息肯定不能满足我们的各种复杂需求。
     对于toString()方法,他返回的字符串应该是简洁的,但所包含的信息是非常丰富的,并且很易于阅读,使我们可以非常方便的了解到该实体对象当时的状态。虽然,对于一个实体对象的toString()方法的实现并没有很严格的规定,但是提供一个号的toString()方法的实现,可以使我们在使用这个类时更加的方便。
    当一个对象被传递给print()方法、字符串连接操作符(+)以及assert时,被传递对象的toString()方法将会被自动调用。如果这是提供一个好的toString()方法,那么对于产生一个好的提示信息将会是非常方便的,有利于调适工作的警醒,例如:
  System,out.println("Base:\t"+base);
   这是很多程序员都非常习惯的调试方法,用它输出的base对象的一些信息,如果实现了toString()方法,那么输出的信息的形式可能为:base:【id=1234567】,而如果使用的是默认的toString()方法,那么得到的结果可能是Base:Base@1b2f3d。通过这个信息除了可以判断出该对象不为空外,得不到该对象的任何其他信息,这不是我们想要的结果:
    实现一个对象的toString()方法,最好遵循以下的原则:
  1、toString()方法应该包含所有的令人感兴趣的信息,也就是说包含的内容应该全面,通过输出的内容那能够了解这个对象的所有信息。
    2、要注意一个良好的表现格式,虽然不要求非常完美,输出的信息应该是可读的,能明确的表达你的意图。
3、要采集用通用的发放来实现toString()方法,不要依赖于对象中的一些具体实现,否则你的toString()方法就要遵循业务实现的修改而不断的进行修改。
最后,再一次建议大家在实现对象的时候要实现toString()方法,这样会给编程和调试工作带来很到的建议

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
希望对您有帮助
回复 使用道具 举报
weekDay.nextDay()得到的是对象 ,但打印的时候却打印出的字符串,因为打印对象的时候会自动调用toString()方法的,
你如果这样写呢weekDay.nextDay().toString()也行,效果是一样的。
toString()方法,是Object类中的方法,也就是所有的对象都可以调用此方法,当打印一个类时,就会自动调用它的toString()方法,默认格式就是  类名@对象地址    的形式,可以根据自己的显示效果需要,重写toString()方法。

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
System.out.println(weekDay.nextDay()) ;
执行println方法传入参数是Object
在内部会执行String.valueOf(weekDay.nextDay())  
valueOf()方法内部会执行weekDay.nextDay().toString();

如果这样写呢weekDay.nextDay().tostring() ;  这样写是直接传入string类型参数在内部就不进行转String的工作了

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马