枚举类

使用方法

  1. 使用关键字enum代替class,默认会继承Enum类
  2. public static final 类名 = new 类名(参数)直接使用类名(参数)代替,这种语法会默认调用该类的构造器,如果有无参构造器可以不填参数
  3. 如果有多个常量对象,使用,间隔
  4. 创建的对象放在枚举类的行首
  5. Enum类不可在外部创建对象,因为其构造器为私有

常用方法

方法名 详细描述
valueOf 通过字符串找到叫该名字的枚举对象,如果没找到会报异常
toString 返回枚举对象的名称,通常会在枚举类中重写该方法
values 隐藏在枚举类中的方法,返回一个数组,含有全部定义的枚举对象
ordinal 输出该枚举对象的定义次序,从0开始编号
compareTo 比较两个枚举对象,按照定义次序比较,返回前面的枚举常量编号减去后面的枚举常量编号

注意事项

  1. 使用enum关键字后不能继承其他类(enum会隐式的继承Enum类)
  2. 枚举类的普通类一样可以实现接口

注解

注解(Annotation)也叫做元数据(Metadata),用于解释包、类、方法、属性、构造器、局部变量等数据信息。注解不影响程序逻辑,但是可以被编译,相当于嵌入在代码中的补充信息。

常用的注解符号

  1. @Override重写某个父类方法,该注解只能用于方法

  2. @Deprecated表示某个程序元素已过时,即不推荐使用

  3. @SuppressWarnings抑制编译器警告,一般使用all,语法@SuppressWarnings({"all"})

  4. @interface用于定义了注解类,之后用到再细说

  5. 元注解

    • @Retention指定注解的作用范围,有三种类型:SOURCE源码时,CLASS类中,RUNTIME运行时
    • @Target指定注解可以在哪些地方使用
    • @Documented指定该注解是否会在javadoc体现
    • @Inherited子类继承父类的注解

异常处理

​ 在程序执行中发生的不正常行为称为异常,异常不是语法或逻辑错误。

​ 正常来说,当程序出现异常时,会立即终止,不会执行后面的代码,但是这样会导致因为一点小错误而耽误整个程序的执行。为了避免这种事情发生,引入异常处理机制进行异常处理,那么即使出现了异常,程序也可以继续执行。

异常的分类

  1. Error:JVM无法解决的严重问题。如:JVM系统内部错误,资源耗尽等严重情况。StackOverflowError、OutOfMemoryError等。Error属于严重错误,程序会崩溃。
  2. Exception:其他外在因素导致的一般性问题,可以使用try-catch语句跳过避免程序崩溃。比如NullPointerException,ArithmeticException等。Exception分为运行时异常编译时异常

try-catch用法及注意事项

try-catch类似于Python的try-except

public class Test{
public int num1 = 10, num2 = 0;
try{
int num = num1 / num2; // 除0异常
// 之后的代码不执行,直接进入到catch
// 若try中没有异常,则不进入catch块
} catch (NullPointerException e){
System.out.println(e.getMessage()); // 输出异常信息
} catch (Exception e){ // catch语句可以有多个,子类异常在前,父类在后
......
} finally { // finally可加可不加
// 如果加了意味无论try是否有异常,catch是否捕获了异常,都一定会执行finally中的语句
// 通常将关闭资源的代码放在finally中
}
......
}

throws用法

​ 如果一个方法中可能产生某种异常,但是不能确定如何处理这种异常,则可以显示地声明抛出异常,表示由该方法的调用者负责处理。

​ throws可以声明抛出的异常列表,可以是异常类型或者异常的父类类型。

public class Test{
public void f() throws FileNotFoundException, Exception{
FileInputStream fis;
fis = new FileInputStream("d://aa.txt"); // 不存在此文件会产生FileNotFoundException
}
}

注意事项

  1. 对于编译异常,程序必须处理。对于运行异常,若程序不处理,默认使用throws向上抛出,直到抛到JVM处终止程序。
  2. 子类重写父类的方法时,对抛出异常的规定:子类重写的方法,抛出的异常要么和父类的异常一致,要么为父类抛出异常的子类。
  3. 如果有try-catch语句,就不必用throws

自定义异常

自定义一个异常,用于规定程序必须按照某个指定的逻辑来编写或运行。

用法及注意事项

一般情况下,继承RuntimeException

public class Test{
public static void main(String[] args){
int num = 100;
if(num > 50) throw new NumException("num is too big"); // 抛出一个自定义异常
}
}

class NumException extends RuntimeException{
public NumException(String message){
super(message);
}
}

throws与throw

意义 位置 后面接
throws 异常处理的一种方式 方法声明处 异常类型
throw 手动生成异常对象的关键字 方法体中 异常对象