----------siwuxie095
1、认识异常
异常是导致程序中断运行的一种指令流,如果不对异常进行正确处理,
就可能导致程序的中断执行,造成不必要的损失
异常范例:
代码1:
package com.siwuxie095.exception;
class Exc{ int i=10; }
public class ExceptionDemo01 {
public static void main(String[] args) { Exc e=null; //如果注释下面一行代码,会出现空指针异常 //e=new Exc(); System.out.println(e.i); }
} |
运行一览:
出现异常:NullPointerException,空指针异常
代码2:
package com.siwuxie095.exception;
class Exc{ int i=10; }
public class ExceptionDemo01 {
public static void main(String[] args) { Exc e=null; //如果注释下面一行代码,会出现空指针异常 e=new Exc(); int j=0; //除数为0,出现算术异常 int temp=e.i/j; System.out.println(temp); }
} |
运行一览:
出现异常:ArithmeticException,算术异常
2、处理异常
异常格式:
try 中放的是异常的语句 或 可能出现异常的语句
catch 可以多个模块,对异常进行捕获
finally 不管程序是否出现异常,都一定会执行
代码1:
package com.siwuxie095.exception;
class Exc{ int i=10; }
public class ExceptionDemo01 {
public static void main(String[] args) { Exc e=null; //如果注释下面一行代码,会出现空指针异常 e=new Exc(); int j=0; int temp=1; try { //除数为0,出现算术异常 temp=e.i/j; //如果可以确定捕获的异常类型 //可以直接用 ArithmeticException 代替 Exception } catch (Exception e2) { System.out.println(e2); }
System.out.println(temp); }
} |
运行一览:
代码2:
package com.siwuxie095.exception;
class Exc{ int a=10; int b=0; }
public class ExceptionDemo01 {
public static void main(String[] args) { int temp=0; Exc e=null; e=new Exc(); try { temp=e.a/e.b; System.out.println(temp); } catch (NullPointerException e2) { System.out.println(e2); }catch (ArithmeticException e2) { System.out.println(e2); }finally { System.out.println("程序退出"); }
}
} |
运行一览:
是否注释掉:e=new Exc(); 的两种异常捕获
3、常见异常
(1)数组越界异常:ArrayIndexOutOfBoundsException
(2)数字格式化异常:NumberFormatException
(3)算术异常:ArithmeticException
(4)空指针异常:NullPointerException
(5)类型转换异常:ClassCastException
4、throws 关键字
在定义一个方法的时候可以使用 throws 关键字声明,
使用 throws 声明的方法表示此方法不处理异常,抛给
方法的调用者处理
格式:
代码:
package com.siwuxie095.exception;
public class ExceptionDemo02 {
public static void main(String[] args) { //依然需要捕获异常 try { tell(10, 0); } catch (Exception e) { System.out.println(e); } }
//将异常抛出,抛给调用者 main() 处理 public static void tell(int i,int j) throws ArithmeticException { int temp=0; temp=i/j; System.out.println(temp); }
} |
运行一览:
或者:如果是主方法抛出异常,将抛给JVM进行处理
package com.siwuxie095.exception;
public class ExceptionDemo02 {
//如果主方法中不再捕获异常,而是也抛出异常,将抛给JVM处理 public static void main(String[] args) throws Exception{ tell(10, 0); }
//将异常抛出,抛给调用者 main() 处理 public static void tell(int i,int j) throws ArithmeticException { int temp=0; temp=i/j; System.out.println(temp); }
} |
运行一览:
JVM处理的异常,不过建议自己 try catch 捕获异常更好
5、throw 关键字
throw 关键字抛出一个异常,抛出的时候直接抛出异常类的实例化对象即可
代码:
package com.siwuxie095.exception;
public class ExceptionDemo03 {
public static void main(String[] args) { try { //通过throw 抛出一个实例化对象的异常 throw new Exception("实例化异常对象"); } catch (Exception e) { //打印该异常 System.out.println(e); } }
} |
运行一览:
6、自定义异常
自定义异常直接继承 Exception 就可以完成自定义异常类
〔自定义异常一般用于大工程,因为不知道系统抛出的异常到底在何处,
比较难找,这时就需要自定义异常给出具体的提示〕
代码:
package com.siwuxie095.exception;
//继承自Exception class MyException extends Exception{ //构造方法,参数 msg 用于传递错误信息 public MyException(String msg) { //通过 super() 调用 Exception 里的错误传递 super(msg); }
}
public class ExceptionDemo04 {
public static void main(String[] args) { try { //抛出自己的异常,并提示:自定义异常 throw new MyException("自定义异常"); } catch (MyException e) { //输出该异常 System.out.println(e); }
}
} |
运行一览:
【made by siwuxie095】