枚举、匿名内部类学习笔记

本文介绍了Java中枚举类型的定义与使用方法,并详细解释了枚举对象、构造方法等概念。此外,还探讨了匿名内部类的概念、适用场景及使用原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



[java]  view plain copy
  1. /*      ### 枚举类型复习笔记  ### 
  2.  *  
  3.  *  JDk1.5之后引入了枚举类型,枚举定义如下: 
  4.  * 
  5.  *  [public] enum 枚举名称{ 
  6.  *  枚举对象1,枚举对象2,...,枚举对象N ; 
  7.  *  } 
  8.  * 
  9.  *  1)枚举对象的定义必须要于存在相应的构造方法相对应 
  10.  *  2)构造方法必须是private,从而保证构造函数只能在内部使用 
  11.  *  3)枚举类型是一种类型,用于定义变量,以限制变量的赋值 
  12.  *  4)赋值时通过"枚举名.值"来取得相关枚举中的值 
  13.  *  5)枚举列表必须写在最前面,否则编译出错 
  14.  *  6)枚举也可以象一般的类一样添加方法和属性 
  15.  * 
  16.  *  # 枚举只有一个成员时,就可以作为一种单例的实现方式。 
  17.  *  
  18.  *      ### 匿名内部类复习笔记  ### 
  19.  * 
  20.  *  1,匿名内部类其实就是内部类的简写格式。 
  21.  *  2,定义内部类的前提: 
  22.  *      内部类必须是继承一个类或者实现接口。 
  23.  *  3,匿名内部类的格式:new 父类或接口(){定义子类的内容} 
  24.  *  4,其实匿名内部类就是一个带内容的匿名子类对象。 
  25.  */  
  26.   
  27. package demo;  
  28.   
  29. public class EnumTest {  
  30.   
  31.     /** 
  32.      * @param args 
  33.      */  
  34.     public static void main(String[] args) {  
  35.         // TODO Auto-generated method stub  
  36.         // 枚举类型是一种类型,用于定义变量,以限制变量的赋值  
  37.         // 赋值时通过"枚举名.值"来取得相关枚举中的值  
  38.         WeekDay weekDay1 = WeekDay.MON;  
  39.         System.out.println(weekDay1);  
  40.         System.out.println(weekDay1.ordinal());  
  41.         System.out.println(WeekDay.valueOf("SUN"));  
  42.         System.out.println(WeekDay.values().length);  
  43.   
  44.     }  
  45.       
  46.     public enum WeekDay {  
  47.           
  48.         // 枚举列表必须写在最前面,否则编译出错  
  49.         // 就相当于这句话:public final static WeekDay SUN = new WeekDay();  
  50.         SUN,MON,TUE,WED,THI,FRI,SAT;  
  51.   
  52.         //构造函数只能是private, 从而保证构造函数只能在内部使用  
  53.         private WeekDay(){System.out.println("first");} //构造方法  
  54.         private WeekDay(int day){System.out.println("second");}//有参构造方法  
  55.     }  
  56.       
  57.     public enum TrafficLamp{  
  58.           
  59.         //匿名内部类的格式:new 父类或接口(){定义子类的内容}  
  60.         //其实匿名内部类就是一个带内容的匿名子类对象  
  61.         RED(30){  
  62.   
  63.             @Override  
  64.             //内部类必须是继承一个类或者实现接口  
  65.             //匿名子类对象要覆盖父类的nextLamp()方法  
  66.             public TrafficLamp nextLamp() {  
  67.                 // TODO Auto-generated method stub  
  68.                 return GREEN;  
  69.             }  
  70.               
  71.         },  
  72.         GREEN(45){  
  73.   
  74.             @Override  
  75.             public TrafficLamp nextLamp() {  
  76.                 // TODO Auto-generated method stub  
  77.                 return YELLOW;  
  78.             }  
  79.               
  80.         },  
  81.         YELLOW(5){  
  82.   
  83.             @Override  
  84.             public TrafficLamp nextLamp() {  
  85.                 // TODO Auto-generated method stub  
  86.                 return RED;  
  87.             }  
  88.               
  89.         };  
  90.         public abstract TrafficLamp nextLamp();  
  91.           
  92.         // 枚举也可以象一般的类一样添加方法和属性  
  93.         private int time;  
  94.         private TrafficLamp(int time){this.time = time;}  
  95.     }  
  96. }  
  97. /*  匿名内部类(from thinking in java 3th) 
  98.  
  99. 简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类? 
  100.     如果满足下面的一些条件,使用匿名内部类是比较合适的: 
  101.  
  102. 1)只用到类的一个实例。 
  103. 2)类在定义后马上用到。 
  104. 3)类非常小(SUN推荐是在4行代码以下) 
  105. 4)给类命名并不会导致你的代码更容易被理解。 
  106.  
  107.     在使用匿名内部类时,要记住以下几个原则: 
  108. 1)匿名内部类不能有构造方法。 
  109. 2)匿名内部类不能定义任何静态成员、方法和类。 
  110. 3)匿名内部类不能是public,protected,private,static。 
  111. 4)只能创建匿名内部类的一个实例。 
  112.   5)一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。 
  113. 6)因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。 
  114. */  

[java]  view plain copy
  1. /*      ### 枚举类型复习笔记  ### 
  2.  *  
  3.  *  JDk1.5之后引入了枚举类型,枚举定义如下: 
  4.  * 
  5.  *  [public] enum 枚举名称{ 
  6.  *  枚举对象1,枚举对象2,...,枚举对象N ; 
  7.  *  } 
  8.  * 
  9.  *  1)枚举对象的定义必须要于存在相应的构造方法相对应 
  10.  *  2)构造方法必须是private,从而保证构造函数只能在内部使用 
  11.  *  3)枚举类型是一种类型,用于定义变量,以限制变量的赋值 
  12.  *  4)赋值时通过"枚举名.值"来取得相关枚举中的值 
  13.  *  5)枚举列表必须写在最前面,否则编译出错 
  14.  *  6)枚举也可以象一般的类一样添加方法和属性 
  15.  * 
  16.  *  # 枚举只有一个成员时,就可以作为一种单例的实现方式。 
  17.  *  
  18.  *      ### 匿名内部类复习笔记  ### 
  19.  * 
  20.  *  1,匿名内部类其实就是内部类的简写格式。 
  21.  *  2,定义内部类的前提: 
  22.  *      内部类必须是继承一个类或者实现接口。 
  23.  *  3,匿名内部类的格式:new 父类或接口(){定义子类的内容} 
  24.  *  4,其实匿名内部类就是一个带内容的匿名子类对象。 
  25.  */  
  26.   
  27. package demo;  
  28.   
  29. public class EnumTest {  
  30.   
  31.     /** 
  32.      * @param args 
  33.      */  
  34.     public static void main(String[] args) {  
  35.         // TODO Auto-generated method stub  
  36.         // 枚举类型是一种类型,用于定义变量,以限制变量的赋值  
  37.         // 赋值时通过"枚举名.值"来取得相关枚举中的值  
  38.         WeekDay weekDay1 = WeekDay.MON;  
  39.         System.out.println(weekDay1);  
  40.         System.out.println(weekDay1.ordinal());  
  41.         System.out.println(WeekDay.valueOf("SUN"));  
  42.         System.out.println(WeekDay.values().length);  
  43.   
  44.     }  
  45.       
  46.     public enum WeekDay {  
  47.           
  48.         // 枚举列表必须写在最前面,否则编译出错  
  49.         // 就相当于这句话:public final static WeekDay SUN = new WeekDay();  
  50.         SUN,MON,TUE,WED,THI,FRI,SAT;  
  51.   
  52.         //构造函数只能是private, 从而保证构造函数只能在内部使用  
  53.         private WeekDay(){System.out.println("first");} //构造方法  
  54.         private WeekDay(int day){System.out.println("second");}//有参构造方法  
  55.     }  
  56.       
  57.     public enum TrafficLamp{  
  58.           
  59.         //匿名内部类的格式:new 父类或接口(){定义子类的内容}  
  60.         //其实匿名内部类就是一个带内容的匿名子类对象  
  61.         RED(30){  
  62.   
  63.             @Override  
  64.             //内部类必须是继承一个类或者实现接口  
  65.             //匿名子类对象要覆盖父类的nextLamp()方法  
  66.             public TrafficLamp nextLamp() {  
  67.                 // TODO Auto-generated method stub  
  68.                 return GREEN;  
  69.             }  
  70.               
  71.         },  
  72.         GREEN(45){  
  73.   
  74.             @Override  
  75.             public TrafficLamp nextLamp() {  
  76.                 // TODO Auto-generated method stub  
  77.                 return YELLOW;  
  78.             }  
  79.               
  80.         },  
  81.         YELLOW(5){  
  82.   
  83.             @Override  
  84.             public TrafficLamp nextLamp() {  
  85.                 // TODO Auto-generated method stub  
  86.                 return RED;  
  87.             }  
  88.               
  89.         };  
  90.         public abstract TrafficLamp nextLamp();  
  91.           
  92.         // 枚举也可以象一般的类一样添加方法和属性  
  93.         private int time;  
  94.         private TrafficLamp(int time){this.time = time;}  
  95.     }  
  96. }  
  97. /*  匿名内部类(from thinking in java 3th) 
  98.  
  99. 简单地说:匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类? 
  100.     如果满足下面的一些条件,使用匿名内部类是比较合适的: 
  101.  
  102. 1)只用到类的一个实例。 
  103. 2)类在定义后马上用到。 
  104. 3)类非常小(SUN推荐是在4行代码以下) 
  105. 4)给类命名并不会导致你的代码更容易被理解。 
  106.  
  107.     在使用匿名内部类时,要记住以下几个原则: 
  108. 1)匿名内部类不能有构造方法。 
  109. 2)匿名内部类不能定义任何静态成员、方法和类。 
  110. 3)匿名内部类不能是public,protected,private,static。 
  111. 4)只能创建匿名内部类的一个实例。 
  112.   5)一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。 
  113. 6)因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。 
  114. */  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值