枚举和异常

一、枚举

1. 什么是枚举

枚举:某个类型的对象是有限的几个。例如星期,性别,月份 ,季节,支付方式,员工状态,订单状态等。不胜枚举,故枚举的意思是表面对象的个数是数的过来的事务。

2.枚举的作用

JDK 5 之前:定义这些常量有很多冗余代码

public class Season{
	public static final Season SPRING = new Season("春");
	public static final Season SUMMER = new Season("夏");
	public static final Season AUTUMN = new Season("秋");
	public static final Season WINTER = new Season("冬");
}

JDK5之后:switch支持枚举类型

public enum Season{
	//静态常量
	SPRING,
	SUMMER,
	AUTUMN,
	WINTER;
	final String name;//final修饰的变量没有默认初始值
	
	Season(){
		name = "";//初始化
	}

	//构造器
	void Season(String name){
		this.name = name;
	}
}

switch(Season.SPRING){
	case SPRING:
		System.out.println("春天");
		break;
	case SUMMER:
		System.out.println("夏天");
		break;
	case AUTUMN:
		System.out.println("秋天");
		break;
	case WINTER:
		System.out.println("冬天");
		break;
}

3. 枚举的要求和特点

  • 定义的enum类型总是继承自java.lang.Enum,且无法被继承;
  • 只能定义出enum的实例,而无法通过new操作符创建enum的实例;
  • 定义的每个实例都是引用类型的唯一实例;
  • 可以将enum类型用于switch语句。
  • enum的构造方法要声明为private,字段强烈建议声明为final;

4. 枚举类的方法

toString():返回常量名
name():返回常量名
oridinal(): 返回对应编号,按照编写对象顺序排列,从0开始。
values(): 获取枚举中的所有对象
Season.valueOf(“字符串”) : 返回对应的季节对象

二、异常

1. 异常体系

程序出现不正常情况,如果没有及时处理,JVM会终止。
异常超类Throwable

  • Error错误:比较严重,无法处理,程序终止
    • StackOverflowError:栈溢出
    • OutOfMemoryError:内存溢出
  • Exception异常:表示一般性问题,一般可以处理。
    • 受检异常(checkedException):除运行时异常外的异常,编译期异常,这类异常必须处理,如果未处理,编译无法通过。
    • 非受检异常(unCheckedException):RuntimeException,是否处理都可以直接运行,但有可能运行时出现问题。
      体系
      受检异常:出现的原因是程序之外的因素导致的,容易被程序员忽略,如文件不存在,网络异常等,不是通过改写代码可以避免的。
      非受检异常:通常是因为代码逻辑不够严谨导致的,应该尽量通过修改代码来纠正避免。
      枚举和异常_第1张图片

2. 异常抛出机制

当程序运行时发生了异常,JVM会在异常发生处,自动创建对应类型的异常类对象,并向方法的调用处逐层抛出。
JVM接收到异常对象后,会在控制台打印异常信息,并终止。

异常抛出方式:
1. JVM自动创建
2. 使用 throw 异常对象 手动抛出

3. 异常处理

  • 处理方式1:使用try-catch-finally来捕获异常,阻止异常抛给JVM,导致程序异常终止。
  • 处理方式2:抛给调用程序,暂时不处理,在方法上声明 throw Exception。

4. 自定义异常

public class BaseException extends RuntimeException {
    public BaseException() {
        super();
    }

    public BaseException(String message, Throwable cause) {
        super(message, cause);
    }

    public BaseException(String message) {
        super(message);
    }

    public BaseException(Throwable cause) {
        super(cause);
    }
}

上述构造方法实际上都是原样照抄RuntimeException。这样,抛出异常的时候,就可以选择合适的构造方法。通过IDE可以根据父类快速生成子类的构造方法。

你可能感兴趣的:(java)