Java把异常当作对象来处理,定义了一个基类java.lang.Throwable作为所有异常的超类
异常分为两大类,错误Error和异常Exception
Error
Exception
两者区别
异常处理的5个关键字
try、catch、finally、throw,throws
Throwable是最高异常
抛出异常不处理,捕获需要处理
捕获
假设捕获多个异常,只会执行一个异常。异常范围必须从小到大写或者互不相交,否则会报错
public abstract class tea {
public abstract void run();
public abstract void stand();
public static void main(String[] args) {
int a=1;
int b=1;
try { //try监控区域
System.out.println(a/b);
}catch (ArithmeticException e) //catch捕获异常
{
System.out.println("程序异常:b不能为0");
}catch(Exception e)
{
}catch (Error e)
{
}catch (Throwable e)
{
}finally { //finally都会被执行
System.out.println("finally");
}
}
}
抛出
系统自动抛出
throw
throw 指的是语句抛出异常,后面跟的是对象,如:throw new Exception,一般用于主动抛出某种特定的异常
public class ThrowTest {
public static void main(String[] args) {
String string = "abc";
if ("abc".equals(string)) {
throw new NumberFormatException();
} else {
System.out.println(string);
}
}
}
throws
throws 用于方法名后,声明方法可能抛出的异常,然后交给调用其方法的程序处理,如:
public class ThrowTest {
public static void test() throws ArithmeticException {
int a = 0;
int b = 1;
System.out.println(b / a);
}
public static void main(String[] args) {
try {
test();
} catch (ArithmeticException e) {
// TODO: handle exception
System.out.println("test() -- 算术异常!");
}
}
}
throw与throws的不同之处
自定义异常
java内置的异常类可以描述出现的大部分异常情况
自定义异常,需要继承Exception类
步骤
package com.zhou;
public class HelloWorld {
public void test(int a) throws MyException{
System.out.println("传递的参数为==>"+a);
if(a>2)
{
throw new MyException(a);
}
System.out.println("OK");
}
/**
* @param args
*/
public static void main(String[] args) {
HelloWorld helloWorld=new HelloWorld();
try {
helloWorld.test(1);
} catch (MyException e) {
System.out.println("异常"+e);
}
}
}
package com.zhou;
public class MyException extends Exception{
private int a;
public MyException(int a) {
this.a = a;
}
/**
*异常的打印信息
* @return
*/
@Override
public String toString() {
return "MyException{" +
"a=" + a +
‘}‘;
}
}
传递的参数为==>11
异常MyException{a=11}
对于异常要合理规避同时辅助try catch处理
在多重catch块后面,加一个Exeception来处理可能被遗漏的异常
对于不确定的代码,可以机上try-catch,处理潜在的异常
添加finally语句区释放占用的资源
原文:https://www.cnblogs.com/szZhouFeng/p/15251739.html