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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 狂风逆流 中级黑马   /  2013-12-20 23:08  /  864 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package cn.itcast.day1;

  2. public class WeekDay {

  3.         private WeekDay(){}
  4.                 public final static WeekDay SUN=new WeekDay();
  5.                 //这是什么意思,为什么可以在本类中直接new呢?为什么不直接定义一个String常量呢?
  6.                 //为什么要定义成WeekDay对象的?求解释
  7.                 public final static WeekDay MON=new WeekDay();
  8.        
  9.         public WeekDay nextDay(){
  10.                 if(this==SUN){
  11.                         return MON;
  12.                 }else{
  13.                         return SUN;
  14.                 }
  15.         }
  16.         public String toString(){
  17.                 return this==SUN?"SUN":"MON";
  18.         }

  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

3 个回复

倒序浏览
public final static WeekDay SUN=new WeekDay();
//这是什么意思,为什么可以在本类中直接new呢?为什么不直接定义一个String常量呢?

这是什么意思
因为WeekDay 的构造方法是私有的 也就是不允许创建WeekDay 的对象 如果想要获取WeekDay 的对象
就要通过weekday中定义的方法
为什么可以在本类中直接new呢
在类中原本就可以直接创建本类对象 将类的构造方法私有 只是不让本类以外的元素创建该类的对象
为什么不直接定义一个String常量呢?
如果直接定义成String常量 就无法使用本类中的nextDay方法 因为只有本类对象才能调用本类中定义的方法

//为什么要定义成WeekDay对象的?求解释
同上

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
你想定义一个String字符串也是可以的,但是,这个是视情况而定的,在不同的代码中情况也就不同,并不是非得public final static WeekDay SUN=new WeekDay(); 并不是非得new出这个类的对象,这里new出WeekDay对象,那么就是为了使用此类里面的方法

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
你好,你这段代码这个类,是枚举类,具体分析请看代码后面
private WeekDay(){}//构造方法是私有的
                public final static WeekDay SUN=new WeekDay();
                //在这里,该枚举类,前面的构造方法是私有的,别人没权限new对象,只有在自己内部new一个对象,你说的为什么不直接定义String常量,这样的话就失去了枚举的优点,你没法定义nextDay方法方法吧,如果是简单的常量,不是很复杂当然可以使用String
                //因为定义成WeekDay对象的,才能在主代码中通过对象直接调用枚举中的枚举值
           
        

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

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