异常——JavaSE基础
异常
异常的分类
- 检查性异常
- 运行时异常:可能被程序员避免的异常,运行时异常可以在编译时被忽略
- 错误ERROR:错误不是异常
在Java中把异常当作对象来处理,并且定义了一个基类java.lang.Throwable
作为所有异常的超类
在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Error和异常Exception
public class Demo02 {
public static void main(String[] args) {
try {
System.out.println(10 / 0);
}catch (ArithmeticException e){
System.out.println("抛出异常!");
System.out.println(e.getMessage());
e.printStackTrace(); // 打印错误的栈信息
}finally {
System.out.println("finally语句块一般用于释放占用的资源");
}
}
}
使用Throwable
捕获所有异常或错误
可以使用多层catch捕获遗漏的异常
public class Demo02 {
public static void main(String[] args) {
try {
//System.out.println(10 / 0);
int[] a = new int[10];
a[10] = 1;
}catch (ArithmeticException e){ // 捕获算术异常
System.out.println("抛出异常!");
System.out.println(e.getMessage());
e.printStackTrace(); // 打印错误的栈信息
}catch (Exception e){ // 捕获所有异常,用于捕获遗漏的异常
System.out.println(e);
}finally {
System.out.println("finally");
}
}
}
自定义异常
除了可以使用Java异常类中自带的异常,也可以继承Exception
类自定义一个异常
自定义异常
public class MyException extends Exception{
private int detail;
public MyException(int a) {
this.detail = a;
}
@Override
public String toString() {
return "MyException{" +
"detail=" + detail +
'}';
}
}
测试类
public class Demo03 {
public static void main(String[] args) {
try{
demo03(11); // 修改这里的参数为小于等于10的数,则不会抛出异常
}catch (MyException e){
System.out.println("MyException=>" + e);
}
}
static void demo03(int a) throws MyException{
System.out.println("传递的参数为:" + a);
// 如果a > 10则抛出异常,否则不抛出
if (a > 10) {
throw new MyException(a);
}
System.out.println("OK");
}
}
throw
是手动抛出异常,throws
是方法抛出异常