文章目录- 1. 异常例子
- 2. 异常处理
- 3. 抛出异常
- 4. 编写异常类
1. 异常例子
代码语言:javascript复制class TestTryCatch {
public static void main(String[] args){
int arr[] = new int[5];
arr[7] = 10;
System.out.println("end!!!");
}
}
输出:(越界)
代码语言:javascript复制Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
at TestTryCatch.main(TestTryCatch.java:4)
进程已结束,退出代码1
2. 异常处理
代码语言:javascript复制class TestTryCatch {
public static void main(String[] args){
try {
int arr[] = new int[5];
arr[7] = 10;
}
catch (ArrayIndexOutOfBoundsException e){
System.out.println("数组范围越界!");
System.out.println("异常:" e);
}
finally {
System.out.println("一定会执行finally语句块");
}
System.out.println("end!!!");
}
}
输出:
代码语言:javascript复制数组范围越界!
异常:java.lang.ArrayIndexOutOfBoundsException: 7
一定会执行finally语句块
end!!!
3. 抛出异常
语法:throw 异常类实例对象;
int a = 5, b = 0;
try{
if(b == 0)
throw new ArithmeticException("一个算术异常,除数0");
else
System.out.println(a "/" b "=" a/b);
}
catch(ArithmeticException e){
System.out.println("抛出异常:" e);
}
输出:
代码语言:javascript复制抛出异常:java.lang.ArithmeticException: 一个算术异常,除数0
- 对方法进行异常抛出
void add(int a, int b) throws Exception {
int c = a/b;
System.out.println(a "/" b "=" c);
}
代码语言:javascript复制TestTryCatch obj = new TestTryCatch();
obj.add(4, 0);
输出:(报错)
代码语言:javascript复制java: 未报告的异常错误java.lang.Exception; 必须对其进行捕获或声明以便抛出
可见,方法后面跟了 throws 异常1, 异常2...
,则 必须 在调用处 处理
改为:
代码语言:javascript复制TestTryCatch obj = new TestTryCatch();
try{
obj.add(4, 0);
}
catch (Exception e){
System.out.println("必须处理异常:" e);
}
输出:
代码语言:javascript复制必须处理异常:java.lang.ArithmeticException: / by zero
4. 编写异常类
语法:(继承 extends Exception
类)
class 异常类名 extends Exception{
......
}
代码语言:javascript复制class MyException extends Exception{
public MyException(String msg){
// 调用 Exception 类的构造方法,存入异常信息
super(msg);
}
}
代码语言:javascript复制try{
throw new MyException("自定义异常!");
}
catch (Exception e){
System.out.println(e);
}
输出:
代码语言:javascript复制MyException: 自定义异常!