枚举类的定义经典案例:
public enum Size {SAMLL, MEDIUM, LARGE, EXTRA_LARGE};
这个声明定义的类型是一个类,它刚好有四个实例,在此尽量不要构造新对象。因此,在比较连个枚举类型的值的时候,永远不需要调用equals,而直接使用“= =”就可以了。
如果需要的话,可以在枚举中添加一些构造器、方法和域,当然,构造器只是在构造枚举常量的时候被调用。所有的枚举类型都是Enum类的子类,它们继承了这个类的许多方法,其中最有用的一个是toString,这个方法能够返回枚举常量名。每个雷剧类型都有一个静态的value方法,它将返回一个包含全部枚举值的数组。ordinal方法返回enum声明枚举常量的位置,位置从0开始计数。枚举的demo案例如下:
package corejava.chapter5.enumPackage;
import java.util.Scanner;
/**
* @Auther WangYu
* @Date 2022/3/8
*/
public class EnumTest {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Enter a size:(SMALL, MEDIUM, LARGE, EXTRA_LARGE) ");
String input = in.next().toUpperCase();
Size size = Enum.valueOf(Size.class, input);
System.out.println("size = " + size);
System.out.println("abbreviation = " + size.getAbbreviation());
if (size == Size.EXTRA_LARGE) {
System.out.println("Good job-- you paid attention to the _.");
}
}
}
反射
反射提供了一个非常丰富且精心设计的工具集,以便于能够编写动态操作Java代码的程序。使用反射,java可以支持用户习惯的工具,特别是在设计或者运行中添加新类时候,能够快速地应用开发工具动态地查询新添加类的能力。
能够分析类能力的程序称为反射。反射机制的功能及其强大,在下面可以看到,反射机制可以用来:
- 在运行时候分析类的能力
- 在运行时候查看对象,例如,编写一个toString方法供所有类使用
- 实现通用的数组操作的代码
- 利用Method对象,这个对象很像C++中的函数指针
在启动程序时候,包含main方法的类被加载,它会加载所有需要的类,这些类又会加载它们需要的类,依次类推,一般会先显示一个启动画面,然后,再通过调用Class.forName手工地加载其他的类。
捕获异常
异常有两种类型:未检查异常和已检查异常。对于已检查异常,编译器将会检查是否提供了处理器,然而,有很多常见的异常,例如,访问null引用,都属于未检查异常。变异器不会查看是否为这些错误提供了处理器。
对于已检查异常,只需要提供一个异常处理器。可以很容易地发现抛出已检查异常的方法,如果调用了一个抛出已检查异常的方法,而有没有提供处理器,编译器就会给出错误的报告。
利用反射分析类的能力
demo如下: