黑马程序员技术交流社区

标题: 稍微想一点东西,就不懂了 [打印本页]

作者: 史卫平    时间: 2011-9-9 15:20
标题: 稍微想一点东西,就不懂了
在高新技术里面枚举那块,枚举类:就是下面的类
java.lang
类 Enum<E extends Enum<E>>

java.lang.Object
  java.lang.Enum<E>
所有已实现的接口:
Serializable, Comparable<E>


public abstract class Enum<E extends Enum<E>>
extends Object
implements Comparable<E>, Serializable
这是所有 Java 语言枚举类型的公共基本类。


api中Enum这个抽象类中只有valueOf方法

为什么程序中Enum的实现类WeekDay.后面会有
values
valueOf(String arg0)
这两个方法
哪来的啊

WeekDay这个枚举类跟Enum类什么关系?

WeekDay.valueOf("SUN")
weekday2.valueOf("SUN")
结果一样的
感觉好别扭啊
毕竟WeekDay weekday2 = WeekDay.MON;[code=java]public class EnumTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                WeekDay weekday1 = WeekDay.SUN;
                WeekDay weekday2 = WeekDay.MON;
                System.out.println(weekday2.valueOf("SUN") );
                System.out.println(WeekDay.valueOf("SUN"));
                for(WeekDay wd:weekday2.values())
                {
                        System.out.println(wd);
                }
               
        }
        public enum WeekDay{
               
                SUN{
                        public WeekDay nextDay(){
                                return MON;
                        }
                },MON{
                        public WeekDay nextDay(){
                                return SUN;
                        }
                };
                private WeekDay(){}
                public abstract WeekDay nextDay();
        }

}[/code]另外
在反射的那章一开始,我就发现
System.out.println(byte.class==Byte.TYPE.getClass());
等类似的
System.out.println(int.class==Integer.TYPE.getClass());
打印的都是false
这边感觉有点晕
思路清晰解释一下
[ 本帖最后由 史卫平 于 2011-09-09  23:11 编辑 ]
作者: 匿名    时间: 2011-9-9 15:44
System.out.println(byte.class==Byte.TYPE.getClass());
这两个怎么不等啊
我是不是又把什么搞浑了
作者: 匿名    时间: 2011-9-9 21:29
额……貌似没有看懂,能再把问题描述的清楚些么~
作者: 程钧杰    时间: 2011-9-10 01:09
关于System.out.println(byte.class==Byte.TYPE.getClass());

byte.class==Byte.TYPE 返回的是TRUE
.type是返回基本类型 所以Byte.TYPE 就是基本类型byte的字节码,这时候你再去.getClass,那么返回class java.lang.Class了

System.out.println(int.class==Integer.TYPE.getClass()); 同理
[ 本帖最后由 chengjj520 于 2011-09-10  01:27 编辑 ]
作者: 匿名    时间: 2011-9-13 09:22
呵呵,中秋这两天由于回家了,所以一直没有上网额……

恩,在这里先简单说一下最后一个问题吧!
其实这个问题,楼上的童鞋已经回答的很正确了~
如果你还是觉得不容易理解的话,那你可以执行一下这三行代码,你就明白了:[code=java]System.out.println("byte.class.getName() = " + byte.class.getName());
System.out.println("Byte.TYPE.getName() = " + byte.class.getName());
System.out.println("Byte.TYPE.getClass().getName() = " + Byte.TYPE.getClass().getName());[/code]至于前面几个问题,我也不是特别清楚,所以百度了一下,得到的结果是:
enum里面的每个元素都是java.annotation.ElementType类型,这些对象就有values()和valueOf()方法了
至于它们为什么是ElementType类型,以及可以证明它们是这个类型的证据,我还需要再研究下呵呵
作者: 匿名    时间: 2011-9-14 15:07
public enum ElementType   extends Enum<ElementType>

public abstract class Enum<E extends Enum<E>>extends Object implements Comparable<E>, Serializable这是所有 Java 语言枚举类型的公共基本类。


我的问题应该跟着两句话关系比较大,不知道谁可以解释一下,我一时还看不懂




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2