读书人

错误分析

发布时间: 2012-12-25 16:18:28 作者: rapoo

异常分析

1.异常是指在程序运行时出现的非正常事件.比如说:文件无法打开或创建以及空对象的操作。由于异常事件会导致错误,所以一个好的程序必须要对这些异常进行处理,来增加程序的“健壮性”。

2.在C语言中,为了处理异常,通常是通过调用函数通过返回值来处理的。而Java,多采用异常处理机制,这样能使程序更加易读,易懂,以及维护。

3.Throwable和throw以及throw三个关键字的区别:

?? Throwable是所有异常类的超类(父类)。它的直接子类有Exception和Error.Error类及其子类用来处理程序中的异常时,一般是与硬件有关,不需要程序员去处理,Exception类及其子类用来处理异常时,一般是要我们程序员自己捕获并处理的。throw用于抛出异常,throws用于声明有异常抛出。

抛出异常的一般格式为:throw 异常对象名;或者,throw new 异常类名();

两种形式本质是一样的,但前一种需要先构造异常对象,后一只在抛出异常时才创建异常对象,所以经常使用第二种形式。当程序中出现throws出现时,说明该类可能发生异常,这就需要对异常进行处理,处理异常的方法有两种:一种是通过try-catch-finally处理(需要程序员自己操作),还有一种是将异常交给java虚拟机处理。

4.我写个例子来解释下异常是怎么处理的

public class throwsException{ public static void main(String [] args){ try{ chang();  }catch(Exception e){ System.out.println("这是在main方法中捕获的异常");} } public static void chang() throws Exception{//要声明抛出异常 Random random=new Random(); int a=random.nextInt(100); try{ if(a==70){ System.out.println(a); } else{ throw new Exception();//抛出异常 } }catch(Exception e){ System.out.println("这是在chang()异常");} }}
?

???因为chang方法中通过关键字(throws)声明有异常抛出,所以必须在主函数中强制捕获异常,如果没写try-catch语句,则会报错。

当生成的随机数不等于70时,会执行throw new Excetion()语句,throw语句将异常抛给catch。

5.try-catch-finally中,把会产生异常的语句写在try程序块中,可以有多个catch语句,catch语句是多选的,多个catch语句中的异常参数类型必须各不相同,如果try中发生了异常,系统将会从上到下依次查找catch语句中是否有异常参数类型与之匹配,catch中最后一个异常参数类型是所有上面catch语句异常参数类型的父类,如匹配,就进入该catch语句,如果都没有匹配,则进入finally语句。finally语句是资源保护快,不管系统是否找到与之匹配的catcch语句,finally中的语句都要执行。

6.常见的异常:

运行时的异常:

java.lang.ArrayIndexOutofBoundsExcetion(数组下标越界异常)

java.lang.ArithmeticException:/ by zero(零做除数异常)

java.lang.NullPointerException(空对象)

像这类异常编译是可以通过的,它是发生在运行中。如果发生这类异常,我们可以自己根据信息来改进程序。

检查型异常:

除了运行时的异常,其余都是检查型异常。比如说:从键盘中读入一个字符。如果你没有强制处理这类异常,将不能通过编译,它会提示以下信息:hasCheckException.java 4 未报告的错误java.io.Exception

7.自定义异常

如果系统预定义的类不能满足编程要求,我们可以自己定义异常类。自己定义的异常类必须是Throwable的直接或间接子类,不过一般情况是Exception的子类。自定义异常类会自动继承父类中可以继承的方法和属性,一般情况下,它需要声明两个构造方法:一个是不带参数的方法,一个是以字符串为参数,作为本异常类的具体信息:

我用一个例子说明下:

class MyException extends Exception{MyException(){super();}MyException(String s){super(s);}} public class useMyException{public static void main(String [] args){try{throw new MyException("这是我自己定义的异常类");} catch(MyException e){System.out.println("异常信息:"+e.toString());}}}

?

?我的心得体会:在学了异常类之后,让我对异常有了更多的理解,这个异常机制始终贯穿在我们编程中,当我们遇到异常时,不要太过于紧张,我们可以通过提示信息自己改正错误。

?

?

读书人网 >编程

热点推荐