今天主要讲了一些异常处理这方面的内容:
异常分为两类,一类是非受检异常 ,另一类为受检异常。 顾名思义,非受检异常,就是可以不处理的异常,因为这些异常要不就是太大,根本解决不了的,要不就是很轻微,在Throwable类下的Erro和RuntimeException 都属于非受检异常。 受检异常是必须处理的异常,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大神推荐了一款很好的软件intliJ,p神推荐,肯定没的说了,改天试一下。
今天的学习状态感觉还可以吧,希望以后也能保持好这种状态吧,今天就到这儿了,困了,洗洗睡了,感谢大神见证我的成长之路!
<!--EndFragment-->