Java异常
1、什么是异常?
Error
exception
体系结构
2、异常处理机制
try:监控区域
finally:可以不要!!! 在 IO或资源关闭时可以用、运用到善后工作中。
catch: (想要捕获的异常类型)捕获异常。
throw(s): 主动抛出异常,一般在方法中运用。
例一:捕获除数不能为0错误
package com.exception;
public class Demo01 {
public static void main(String[] args) {
int a = 1;
int b = 0;
try{ //try监控区域
System.out.println(a/b);
}catch (ArithmeticException e){ // catch(想要捕获的异常类型) 捕获异常
System.out.println("程序出现异常,除数不能为0");
}finally { //处理善后工作,可以不要
System.out.println("finally");
}
// finally可以不要 假设 IO、资源关闭时可以。善后工作。
}
}
例二:捕获栈溢出错误
package com.exception;
public class Test {
public static void main(String[] args) {
try {
new Test().a();
}catch (Throwable e){
System.out.println("程序错误");
}finally {
System.out.println("finally");
}
}
// 捕获栈溢出错误
public void a(){
b();
}
public void b(){
a();
}
//输出:
//程序错误
//finally
}
例三:多个catch作用
假设要捕获多个异常,要从小到大!!!
package com.exception;
public class Demo01 {
public static void main(String[] args) {
int a = 1;
int b = 0;
try{
System.out.println(a/b);
}catch (Error e){
System.out.println("Error");
}catch (Exception e){
System.out.println("Exception");
}catch(Throwable e){
System.out.println("Throwable");
}finally {
System.out.println("finally");
}
}
//输出:
//Exception 该错误是个异常
//finally
}
例四:抛出异常throw(s)
package com.exception;
public class Test3 {
public static void main(String[] args) {
try {
new Test3().test(1,0);
} catch (ArithmeticException e) {
e.printStackTrace();
}
}
//假设在这个方法中,处理不了这个异常,方法上抛出异常
public void test(int a, int b) throws ArithmeticException{
if(b==0){ // throw throws
throw new ArithmeticException(); //主动抛出异常:一般在方法中运用
}
System.out.println(a/b);
}
}
例五:快捷键 Ctrl + Alt + T: try—catch
package com.exception;
public class Test2 {
public static void main(String[] args) {
int a = 1;
int b = 0;
// 快捷键:Ctrl + Alt + T
try {
System.out.println(a/b);
} catch (Exception e) {
e.printStackTrace();// 打印错误的栈信息
}
}
}
3、自定义异常
例子:
package com.exception.demo02;
//自定义的异常类
public class MyException extends Exception{
//传递数字
private int detail;
public MyException(int a) {
this.detail = a;
}
//toString:异常的打印信息
//快捷键:Alt + Insert + toString
@Override
public String toString() {
return "MyException{" + "detail=" + detail + '}';
}
}
test:
package com.exception.demo02;
public class Test {
//可能会出现异常的方法
static void test(int a) throws MyException{
System.out.println("传递的参数为:" + a);
if (a>10){
throw new MyException(a); //抛出
}
System.out.println("OK");
}
public static void main(String[] args) {
try {
test(11);
} catch (MyException e) {
System.out.println("MyExceptipn=>" + e);
}
}
}
//输出:
//传递的参数为:11
//MyExceptipn=>MyException{detail=11}