学习记录

java 高新技术

枚举
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。(JDK1.5以上)

EnumTest{
  public static void main(String[] args){
        WeekDay weekday =Weekday.MON;
        System.out.println(weekDay.nextDay());
 

public class WeekDay{
   private WeekDay(){}//加{}表示用这个类的一个子类去创建实例对象
   public final static WeekDay SUN=nwe WeekDay();
   public final static WeekDay MON=nwe WeekDay();
   public void nextDay(){
     if(this==SUN){
    return MON;
  } else {
   return SUN;

}
public String toString(){
   return this ==SUN?"SUN":"MON";

}

}

可以有若干公有方法或抽象方法,例如,若要提供nextDay方法必须是抽象的。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。


枚举的基本应用

写一个基本的枚举类
public class EnumTest{
  public static void main(String[] args){
    WeekDay1 weekDay = WeekDay.MON;
   System.out.println(weekDay.nextDay());
   WeekDay weekDay2=WeekDay.FRI;
   System.out.println(weekday2);
   System.out.println(weekday2.name());
   System.out.println(weekday2.ordinal());
   System.out.println(WeekDay.valueof("SUN").toString());
   System.out.println(WeekDay.value().length);
 
   new Date(300){};

}


public enum WeekDay{//JDK提供的枚举类
    SUN{1}//调用第二个带参数的构造方法,MON{}//调用第一个不带参数的构造方法,TUE,WED,THU,FRI,SAT;构造方法都必须位于元素列表之后
private WeekDay(){};
private WeekDay(int day){}

}
public enum TrafficLamp{
   RED(30){
      public  Trafficlamp nextLamp(){
            return GREEN;
        }
},
   GREEN(45){
         public Trafficlamp nextLamp(){
            return YELLOW;
}
  
},
   YELLOW(5){ublic Trafficlamp nextLamp(){
            return RED;
}
};
  public abstract Trafficlamp nextLamp();
  private in time;
  private TrafficLamp(int time){this.time=time;
}

//最复杂了枚举 交通灯
如果枚举只有一个成员时,就可以作为一种单例的实现方式。

Java中的反射

反射的基石--Class类

Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class

Class cls1=字节码1;
Class cls1=字节码2;

Class cls1=Date.class//表示Data在内存中的字节码

P1.getClass()得到实例对象类的字节码

Class.forName("java.lang.String")也是得到那个类的字节码 (返回字节码)

得到字节码的方法(三种):

类名.class,例如,System.class
对象.getClass(),例如,new Date.getClass()
Class.forName("类名"),例如,Class.forName("java.util.Date")

九个预定义的Class对象
除了九个数据类型 还有 void

public class ReflectTest{
 public static void main(String[] args) throw Exception{

       String str1="abc";
       Class cls1=str1.getClass();
       Class cls2=String.class;
       Class cls3=Class.forName("java.lang.String");
       System.out.println(cls1==cls2);
       System.out.println(cls1==cls3);

     这三者字节码相同 都是同一字节码

       System.out.println(cls1.isPrimitive());String不是基本类型的字节码
       System.out.println(int.class.isPrimitive());是基本类型的字节码
       System.out.println(int.class==Integer.class);不是一样
       

}
}
数组类型的Class实例对象
 ClassArray()
 总之,只要是在源程序中出现的类型,都有各自的Class实例对象。例如,int[],void....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值