`
zxb9181213
  • 浏览: 3425 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java的异常处理

 
阅读更多

今天主要讲了一些异常处理这方面的内容:

异常分为两类,一类是非受检异常 ,另一类为受检异常。 顾名思义,非受检异常,就是可以不处理的异常,因为这些异常要不就是太大,根本解决不了的,要不就是很轻微,在Throwable类下的ErroRuntimeException 都属于非受检异常。 受检异常是必须处理的异常,Exception类的除了RuntimeExcep以外的所有子类都属于受检异常。

异常的处理主要有三种方式,第一种为捕获,使用try-catch-finally语句

try{

//这里面为可能出现异常的语句;

}catch(异常类型 引用变量){

//这里为捕获到对应异常类型的异常时所执行的语句

//一般调用 getMessage(),或者printStackTrace()方法。

}....{

//其后可以接多个catch语句,尽量列全所有可能出现的异常类型

//为了以防万一,最后一个catch可以用Exception来捕获,防止有未想到的异常。

}finally{

//这里的语句不论上述语句执行情况如何,都会运行;

}

第二种为直接抛出。很简单,就是在方法签名后throws(注意有s)加异常类型,方法体中throw一个异常类型对象。

Public static int divide(int x, int y )throws ArithmeticException{

If(y == 0 ){

throw new ArithmeticException(不能除以0);

}

return x / y ;

}

后面的try catch 语句就省略不写了,这样就是直接抛出异常了。

第三种呢,就是捕获并抛出异常,一般都会将捕获的异常类包装为自定义的异常类,这样在以后的处理中,可以较快的分辨出异常所处的位置。一般情况下,会先自定义一个异常类。

public class MyException extends Exception{

public MyException(String message){

super( message);//这里面调用了父类的构造器。

}

public MyException(Exception e){

super(e);

}

}

Public static int divide(int x, int y )throws MyException{

try{

return x / y ;

}catch(ArithmeticException e){

throw new MyException(e);

}

}

同样省略了后面的try catch语句,这样自定义异常的方式在后面应该会有很大的用处。  

有这么多异常处理方式,到底什么时候选用何种处理方式呢?简单来说就是“如果是顶层方法 捕获处理, 如果是底层方法 抛出”我是这么理解的,这里说的顶层方法为main()方法或run方法,在这里相当于是老大,底层方法为小弟,如果小弟在运行时发生异常,最好要抛出,交给上级来解决,他自己继续执行自己的程序,如果老大运行时有异常,抛出也没有意义了,因为抛出的话只能交给JVM了,也是程序崩溃,不如直接捕获。

小弟刚刚接触,理解不深,希望大神们不要介意。

还有,异常类是可以继承的,不过继承的时候要注意以下三点:

第一点:,方法重写时,方法签名一致(包括,返回值类型,方法名和参数列表);

第二点:子类的修饰符只能大于或者等于父类的修饰符。

第三点是需要特别注意的,就是子类抛出异常的类型必须小于或者等于父类抛出的异常类型。

今天主要就是这些内容了,其他时间都是老师在教我们简单用了用eclipse,估计以后大部分时间都用eclipse了,不过wp大神推荐了一款很好的软件intliJp神推荐,肯定没的说了,改天试一下。

今天的学习状态感觉还可以吧,希望以后也能保持好这种状态吧,今天就到这儿了,困了,洗洗睡了,感谢大神见证我的成长之路!

<!--EndFragment-->
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics