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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李月 中级黑马   /  2012-5-19 20:32  /  1717 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李月 于 2012-5-19 20:39 编辑
  1. public class VirualEnumTest {

  2.         /**
  3.          * @param args
  4.          */
  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 WeekDay today=WeekDay.SAT;
  8.                 System.out.println(today+"的下一天是"+today.nextDay());
  9.         }

  10. }
  11. class WeekDay{
  12.         private WeekDay(){
  13.                
  14.         }
  15.         public final static WeekDay SUN=new WeekDay();
  16.         public final static WeekDay MON=new WeekDay();
  17.         public final static WeekDay TUE=new WeekDay();
  18.         public final static WeekDay WED=new WeekDay();
  19.         public final static WeekDay THU=new WeekDay();
  20.         public final static WeekDay FN=new WeekDay();
  21.         public final static WeekDay SAT=new WeekDay();
  22.         public WeekDay nextDay(){
  23.                 if(this==SUN){
  24.                         return MON;
  25.                 }else if(this==MON){
  26.                         return TUE;
  27.                 }else if(this==TUE){
  28.                         return WED;
  29.                 } else if(this==WED){
  30.                         return THU;
  31.                
  32.                 }else if(this==THU){
  33.                         return FN;
  34.                 }else if(this==FN){
  35.                         return SAT;
  36.                 }else{
  37.                         return SUN;
  38.                 }

  39.         }
  40.         public String toString(){
  41.                 if(this==SUN){
  42.                         return "星期日";
  43.                 }else if(this==MON){
  44.                         return "星期一";
  45.                 }else if(this==TUE){
  46.                         return "星期二";
  47.                 } else if(this==WED){
  48.                         return "星期三";
  49.                
  50.                 }else if(this==THU){
  51.                         return "星期四";
  52.                 }else if(this==FN){
  53.                         return "星期五";
  54.                 }else{
  55.                         return "星期六";
  56.                 }
  57.         }
  58.         
  59.         
  60. }
复制代码
当我输出打印的时候,我也没有调用类中重写的toString()的方法,打印的结果就是“星期六的下一天是星期日”这是为什么呢?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
我是这样认为的,就使任何的字符,数字等通过System.out.println()输出的时候,该类型都会通过toString()方法转换为字符串输出,例如上边的today,它默认是这样的today.toString(),而且通过端点跟踪了一下,它在输出的时候也是首先进入了你的toString()方法,将星期六返回,后边的那个也类似,所以最终它输出的结果是星期六的下一天是星期日
回复 使用道具 举报
当你用System.out.println()输出一个对象的时候,他会自动调用那个对象的toString()方法来输出的,当且仅当这样才会自动调用的!!!!!(求批评,我不知道这样理解对不对,反正我一直这样理解的,如果我理解错了,希望高人给我指点出来,我也好学习学习!!)

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
System.out.println(today+"的下一天是"+today.nextDay());中的today对象输出时会调用tostring方法。如果没有则会用默认;
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
得到如图:

举例如果你的代码是public String toString(){return "hello";} 结果就成了



也就是说要在system.out.println()函数中输出对象,会自动调用tostring()方法。

SJDA@Y]A9@[CSKU~A8S~TZ4.jpg (5.79 KB, 下载次数: 11)

SJDA@Y]A9@[CSKU~A8S~TZ4.jpg

@0M%(%P2U%UOIC0QYNK2(FK.jpg (3.81 KB, 下载次数: 12)

@0M%(%P2U%UOIC0QYNK2(FK.jpg
回复 使用道具 举报
        我认为是系统中使用了默认时区和默认语言环境,当System.out.println();调用打印时,系统遇到MON,TUE,WED,THD这些特殊的关键字,就会自动将其转化为用系统配置好的中文字符来代替它,SAT对应星期六,SUN对应星期日
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马