异常类型
Throwable 类是所有异常和错误的超类,下面有 Error 和 Exception 两个子类分别表示错误和异常。
1、Exception 又分为运行时异常和非运行时异常,
也称为 不检查异常(Unchecked Exception:如RuntimeException及其子类,如NullPointerException\IndexOutOfBoundsException 可选择捕获处理也可不处理)
和 检查异常(Checked Exception:所有checked exception都是需要在代码中处理的,如IOExcecption\ClassNotFoundException。);
2、Error 定义了在通常环境下不希望被程序捕获的异常,不是程序可以控制的。Error 类型的异常用于 Java 运行时由系统显示与运行时系统本身有关的错误。堆栈溢出是这种错误的一例
常见异常类型
异常类型 | 说明 |
---|---|
Exception | 异常根类 |
RuntimeException | Exception子类,运行时异常,多数 java.lang 异常的根类 |
ArraylndexOutOfBoundException | RuntimeException 子类,数组大小小于或大于实际的数组大小 |
NullPointerException | RuntimeException 子类,空指针异常 |
ClassNotFoundException | RuntimeException 子类,类加载异常 |
IllegalArgumentException | RuntimeException 子类,非法参数 |
IOException | Exception子类,IO异常根类 |
FileNotFoundException | IOException子类,文件未找到 |
EOFException | IOException子类,文件结束 |
InterruptedException | 线程中断异常 |
ClassCastException | 类型转换异常 |
SQLException | 数据库sql异常 |
异常处理
处理关键字:try、catch、 finally、throw、throws
1、try-catch- finally:
try {
逻辑代码块;
} catch(ExceptionType e) {
处理代码块;
//printStackTrace() 方法:指出异常的类型、性质、栈层次及出现在程序中的位置。
//getMessage() 方法:输出错误的性质。
//toString() 方法:给出异常的类型与性质。
} finally{
清理代码块;
}
2、throws:声明异常
returnType method_name(paramList) throws Exception 1,Exception2,…{…}
3、throw:抛出具体异常
throw new IllegalArgumentException(“用户名长度必须大于 8 位!”);
运行:
请输入用户名:
admin
java.lang.IllegalArgumentException: 用户名长度必须大于 8 位!
自定义异常
自定义异常类一般包含两个构造方法:一个是无参的默认构造方法,另一个构造方法以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。
class MyExceptionextends Exception{
public MyException() {
super();
}
public MyException(String s) {
super(s);
}
}
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test
{
public static void main(String[] args)
{
int age;
Scanner input=new Scanner(System.in);
System.out.println("请输入您的年龄:");
try {
age=input.nextInt(); //获取年龄
if(age<0) {
throw new MyException("您输入的年龄为负数!输入有误!");
} else if(age>100) {
throw new MyException("您输入的年龄大于100!输入有误!");
} else {
System.out.println("您的年龄为:"+age);
}
} catch(InputMismatchException e1) {
System.out.println("输入的年龄不是数字!");
} catch(MyException e2) {
System.out.println(e2.getMessage());
}
}
}
运行:
请输入您的年龄:
-2
您输入的年龄为负数!输入有误!