JAVA学习笔记——面向对象编程:枚举类与反射

目录

  • 枚举类
    • 定义枚举类
    • 枚举类方法
  • 反射
    • Class 类
    • 捕获异常
    • 利用反射分析类的能力
    • 在运行时使用反射分析对象
    • 使用反射编写泛型数组代码
    • 调用任意方法

枚举类

“枚举”,顾名思义,就是一一全部列举。生活中我们时常用到“枚举”,例如性别有“男”和“女”、一星期只有周一到周日 7 天。

而在程序设计时,对于这种有固定个数取值的变量,不妨可以考虑使用枚举类。类比基本数据类型(仅仅是类比,并不完全相同),枚举类可以看作是我们自定义了一个新的“数据类型”,它的取值为有限个,类名等价于 int,我们自定义的取值等价于 int 类的各个具体数值。

定义枚举类

public enum Size {
   SMALL, MEDIUM, LARGE, EXTRALARGE};

如上例所示,Size 为我们定义的枚举类的类名,它的取值共有 4 种,分别为 SMALLMEDIUMLARGEEXTRALARGE。在比较枚举类型的取值时,可以直接使用 == 来完成。

对于枚举类,我们同样也可以自定义构造器、方法和域。

public enum Size
{
   
   SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");

   private Size(String abbreviation) {
    this.abbreviation = abbreviation; }
   public String getAbbreviation() {
    return abbreviation; }

   private String abbreviation;
}

上例中,定义了一个构造器 Size(String abbreviation),对应着构造的枚举类中的各个 “值对象”。事实上,我们定义的枚举类,它的所有的值都是一个枚举常量对象,在定义枚举类的时候,就应直接对其完成初始化。而自定义方法,能够帮助我们更好、更高效地编写自己的程序。

枚举类方法

所有的枚举类型都继承自超类 Enum,因此也继承了其一些自带的方法。

  • Enum.toString():返回枚举常量名。
  • Enum.valueOf(Class enumClass, String name):返回指定类中名为 name 枚举常量。
  • Enum.ordinal ():返回枚举常量在 enum 声明中的位置,位置从 0 开始计数。例如,上例中,SMALL 的位置为 0。
  • Enum.compareTo(E other):如果枚举常量出现在 other 之前, 则返回一个负值;如果 this=other,则返回 0;否则,返回正值。枚举常量的出现次序在 enum 声明中给出。

反射

反射库 (reflection library) 提供了一个非常丰富且精心设计的工具集,以便编写能够动态操纵 Java 代码的程序。这项功能被大量地应用于 JavaBeans 中,它是 Java 组件的体系结构。使用反射,Java 可以支持 Visual Basic 用户习惯使用的工具。特别是在设计或运行中添加新类时,能够快速地应用开发工具动态地查询新添加类的能力。

能够分析类能力的程序称为反射 (reflective)。反射机制的功能极其强大,在下面可以看到,反射机制可以用来:

  • 在运行时分析类的能力
  • 在运行时查看对象,例如,编写一个 toString 方法供所有类使用。
  • 实现通用的数组操作代码
  • 利用 Method 对象,这个对象很像 C++ 中的函数指针。

Class 类

在程序运行期间,Java 运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。虚拟机利用运行时类型信息选择相应的方法执行。

保存这些信息的类称为 Class 类,一个 Class 对象表示一个特定类的属性。在程序运行过程中,我们可以通过访问 Class 类,来获取对应类的相关信息。获取 Class 类共有如下三种方法:

// 方法 1
Employee e;
Class c1 = e.getClass();

// 方法 2
Class c2 = int.

你可能感兴趣的:(JAVA学习笔记,java,编程语言,枚举类,反射)