Java异常处理

来源:互联网 发布:淘宝店铺装修页尾 编辑:程序博客网 时间:2024/06/05 21:57

----------siwuxie095

  

  

  

  

  

1、认识异常

  

异常是导致程序中断运行的一种指令流,如果不对异常进行正确处理,

就可能导致程序的中断执行,造成不必要的损失

  

异常范例:

  

代码1

  

package com.siwuxie095.exception;

  

class Exc{

int i=10;

}

  

public class ExceptionDemo01 {

  

public staticvoid 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 staticvoid 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 staticvoid 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 staticvoid 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 staticvoid main(String[] args) {

//依然需要捕获异常

try {

tell(10,0);

}catch (Exception e) {

System.out.println(e);

}

}

 

//将异常抛出,抛给调用者 main() 处理

public staticvoid 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 staticvoid main(String[] args)throws Exception{

tell(10,0);

}

 

//将异常抛出,抛给调用者 main() 处理

public staticvoid 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 staticvoid main(String[] args) {

try {

//通过throw抛出一个实例化对象的异常

throw new Exception("实例化异常对象");

}catch (Exception e) {

//打印该异常

System.out.println(e);

}

}

  

}

  

运行一览:

  

  

  

  

  

  

6、自定义异常

  

自定义异常直接继承Exception 就可以完成自定义异常类

  

〔自定义异常一般用于大工程,因为不知道系统抛出的异常到底在何处,

比较难找,这时就需要自定义异常给出具体的提示〕

  

  

代码:

  

package com.siwuxie095.exception;

  

//继承自Exception

class MyExceptionextends Exception{

//构造方法,参数 msg 用于传递错误信息

public MyException(String msg) {

//通过 super() 调用 Exception里的错误传递

super(msg);

}

 

 

}

  

public class ExceptionDemo04 {

  

public staticvoid main(String[] args) {

try {

//抛出自己的异常,并提示:自定义异常

throw new MyException("自定义异常");

}catch (MyException e) {

//输出该异常

System.out.println(e);

}

 

}

  

}

  

运行一览:

  

  

  

  

【made by siwuxie095】

0 0