异常_若雪似风_新浪博客

异常:

异常的产生:

代码错误,抛出异常的情况

public static void main(String argsp[]) {  

   int i = 10;  

   int j = 0;  

   System.out.println("============= 计算开始 =============");  

   int temp = i / j; // 进行除法运算  

   System.out.println("temp ="+ temp);  

   System.out.println("============= 计算结束 =============");

  }

上述代码在“int temp = i / j ;”位置处产生了异常,一旦产生异常之 后,异常之后的语句将不再执行了,所以现在的程序并没有正确地执行完毕就退 出了。

 

Throwable类是所有异常的父类

 

1)  Error表示很难恢复的错误,如内存越界。一般不期望用户程序来处理,即使 程序员有能力处理这种错误,也还是交给系统处理为好。 

2)  RuntimeException用来表示设计或实现方面的问题,如数组越界等。因为设计 和实现正确的程序不会引发这类异常,所以常常不处理它。发生这类异常时,运行时 环境会输出一条信息,提示用户修正错误。 

3) 其他异常表示运行时因环境的影响可能发生并可被处理的问题。如文件没找到 或存在不完整的URL等。因为用户的错误很可能导致这类问题发生,比如用户键入的 内容不正确,所以Java鼓励程序员处理它们。

 

try、catch、 finally、throw、throws

try  执行可能产生 异常的代码

catch 捕获异常 

finally 无论是否发生异常,代码总能执行

throw  手动抛出一个异常类的对象

throws 声明方法可能要抛出的各种异常

 

Ø try语句   try{……}语句制定了一段代码,这段代码就是一次捕获并处理例外的范围。 在执行过程中,该段代码可能会产生并抛出一种或几种类型的异常对象,它后面的 catch语句要分别对这些异常做相应的处理。如果没有例外发生,所有的catch代码段都 被略过不执行。

 

Ø catch语句 在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个或多个 catch语句,用于处理可能产生的不同类型的异常对象。 在catch中声明的异常对象(catch(SomeException e))封装了异常事件发生的信 息,在catch语句块中可以使用这个对象的一些方法获取这些信息。 例如: getMessage()方法,获取异常信息,返回字符串。 printStackTrace()方法,获取异常类名和异常信息,以及异常出现在程序中的位 置,返回值void。 printStaceTrace(PrintStreams) 方法,通常用该方法将异常内容存储在日志文件中, 以便查阅。

 

finally语句 

finally语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其他部分 以前,能够对程序的状态做统一的管理。 无论try所指定的程序块中是否抛出例外,finally所指定的代码都要执行。 

通常在finally语句中可以进行资源的清除工作,如: 

1)  关闭打开的文件 

2)  删除临时文件  Ø 

 

throw和throws 的区别: 

1)  throws用于标识函数暴露出的异常;throw用于抛出异常对象。 

2)  throws用在函数上,后面跟异常类名;throw用在函数内,后面跟异常对象。 3) 定义功能方法时,就通过throws在函数上标识;在功能方法内部出现某种情 况,程序不能继续运行,需要进行跳转时,就用throw把异常对象抛出。

 

使用try-catch块捕获异常,分为三种情况:

第一种情况

   public void method(){

try {

      // 代码段(此处不会产生异常)

} catch (异常类型 ex) {

      // 对异常进行处理的代码段

}

// 代码段

}

第二种情况

public void method(){

try {

      // 代码段 1

      // 产生异常的代码段 2

      // 代码段 3

} catch (异常类型 ex) {

      // 对异常进行处理的代码段4

}

// 代码段5

}

第三种情况

public void method(){

try {

     // 代码段 1

     // 产生异常的代码段 2

     // 代码段 3

} catch (异常类型 ex) {

     // 对异常进行处理的代码段4

}

// 代码段5

}

抛出异常 throw throws

如果一个Java方法碰到自己无法处理的情况,就应该抛出一个异常。它的原理其 实很简单,一个方法不仅仅要告诉编译器它会返回什么样的值,还要告诉编译器什么 样的错误可能发生。

 

捕获异常

在抛出异常过程中,异常抛出后就可以不用管它了。但是在有些代码中就必须 捕捉这些异常。为了捕捉异常需要使用try-catch语句编写错误处理过程,其语法格 式如下:

try{ 需要检测的代码; 

 }catch(异常类 变量){ 

   异常处理代码;

 }

如果try块内的任何代码抛出了由catch子句制定的异常,则: 

1)  程序跳过try块中的其他代码; 

2) 程序执行catch子句中的处理代码。 

 

 

例:

public class Student {

   private char sex;

   public char getSex() {

return sex;

}

   public void setSex(char sex) throws Exception {

if (sex == '男' || sex == '女') {

this.sex = sex;

} else {

          throw new Exception("性别必须是男或者女!");

}

}

}

public static void main(String[] args) {

Student s=new Student();

try {

s.setSex('红');

} catch (Exception e) {

e.printStackTrace();

}

System.out.println(s.getSex());

}

}

例:

public static void main(String[] args) {

System.out.println("请输入课程代号(1~3之间的数字):");

Scanner scan=new Scanner(System.in);

try{

int num=scan.nextInt();

if(num==1){

System.out.println("C#课程");

}if(num==2){

System.out.println("JAVA课程");

}if(num==3){

System.out.println("Android课程");

}

  }catch(InputMismatchException e){

 e.printStackTrace();

 }

finally{

System.out.println("欢迎提出建议!");

 }

}

 

 

 

 

常见的异常类型

Exception 父类 异常层次结构的根类

ArithmeticException 算术错误情形,如以零作除数

ArrayIndexOutOfBoundsException 数组下标越界

NullPointerException 尝试访问 null 对象成员

ClassNotFoundException 不能加载所需的类

InputMismatchException 欲得到数据类型与实际输入类型不匹配

IllegalArgumentException 方法接收到非法参数

ClassCastException 对象强制类型转换出错

NumberFormatException 数字格式转换异常,如把"abc"转换成数字

try块不能独立存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值