Fork me on GitHub

Java异常处理

----------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】

posted on 2017-03-15 16:01  siwuxie095  阅读(211)  评论(0编辑  收藏  举报

导航