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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于星星 中级黑马   /  2012-7-28 23:02  /  1834 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在枚举类中有一个valueOf方法,这个方法我不知道具体是做什么的?我在随便传入一个字符串的时候运行会报错误java.lang.IllegalArgumentException 具体代码如下:
  1. public class WeekDay1 {

  2.         public static void main(String[] args) {
  3.                 WeekDay week = WeekDay.MON;
  4.                 System.out.println("name="+week.name());
  5.                 System.out.println("ordinal="+week.ordinal());
  6.                 System.out.println(WeekDay.valueOf("ss"));
  7.         }
  8.        
  9.         public enum WeekDay{
  10.                 SUN,STA,THR,FRI,WEN,MON,TUE
  11.         }
  12. }
复制代码
这个方法有什么作用。为什么传入一个字符串会报错,求解释

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

7 个回复

倒序浏览
valueOf 会返回一个枚举类型实例 你的 WeekDay.valueOf("ss")  参数错误
无法 通过 ss  获得一个 ss 的枚举实例,因为 你的 weekDay 中没有定义 ss

你的参数可以使用 枚举中定义的那些 SUN,STA,THR,FRI,WEN,MON,TUE

像 WeekDay.valueOf("SUN")   就没有问题了

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
查API知道枚举的valueof方法的作用是:返回带指定名称的指定枚举类型的枚举常量。名称必须与在此类型中声明枚举常量所用的标识符完全匹配。
不能随便传入一个字符串,要传字符串必须要与Weekday里面声明的常量相匹配,也就是说只能包含在SUN,STA,THR,FRI,WEN,MON,TUE之间。
回复 使用道具 举报
查API啊 楼猪!!
回复 使用道具 举报
丁二跃 发表于 2012-7-28 23:17
valueOf 会返回一个枚举类型实例 你的 WeekDay.valueOf("ss")  参数错误
无法 通过 ss  获得一个 ss 的枚举 ...

这个方法主要是干什么的?能有一个具体的实例吗?
回复 使用道具 举报
于星星 发表于 2012-7-28 23:32
这个方法主要是干什么的?能有一个具体的实例吗?

这个方法是通过字符返回一个枚举类型。
比如
  1. public enum WeekDay{
  2.                 SUN,STA,THR,FRI,WEN,MON,TUE
  3.         }
复制代码
你只能使用枚举类型中定义好的类型名。比如
WeekDay.valueOf("SUN");

同时一个枚举类型还可以实现一个接口,例如
  1. public class Test {
  2.         interface face{
  3.                 public void doSomething();
  4.         }
  5.        
  6.         public enum WeekDay implements face{
  7.         SUN,STA,THR,FRI,WEN,MON,TUE;

  8.                 public void doSomething() {
  9.                         System.out.println(this.name());
  10.                         switch (this) {
  11.                         case FRI:
  12.                                
  13.                                 break;

  14.                         case MON:
  15.                                 break;
  16.                         case STA:
  17.                                
  18.                                 break;

  19.                         case SUN:
  20.                                 break;
  21.                         case THR:
  22.                                
  23.                                 break;

  24.                         case TUE:
  25.                                 break;
  26.                         case WEN:
  27.                                 break;
  28.                         }
  29.                 }
  30.         }

  31.         public static void main(String[] args){
  32.                 WeekDay.FRI.doSomething();
  33.         }
  34. }
复制代码
就可以根据不同的星期做出不同的操作

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我试了一下,他返回一个你在枚举中定义的枚举常量。
比如你将System.out.println(WeekDay.valueOf("ss"));中的"ss"改为你在枚举中定义的"MON",程序运行后就返回一个static的MON。
回复 使用道具 举报
于星星 发表于 2012-7-28 23:32
这个方法主要是干什么的?能有一个具体的实例吗?

这个方法就是根据字符串返回 一个枚举类型的对象

其实和Interger.valueOf("123")  差不多  这里传入的字符串要是数字  枚举的 valueof 参数要是你定义的那些值的字符串形式
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马