java异常处理(父子异常的处理),java异常处理

万分分为编译时生、运行时生 (RuntimeException)。

java异常处理(父子异常的处理),java异常处理

  我那时学java异常处理的早晚,对于父子异常的拍卖,我记忆几句子话“子类方法就能够丢弃来父类方法所扔来底不可开交或者是其子异常,子类构造器必须使摒弃来父类构造器的非常或者其大异常”。那个时候还无亮堂子类方法为什么而就规范抛来很,后来由此上《Thinking
in Java》,我才懂得其中的理,现在自更来温习一下。

平、子类方法就能够废除来父类方法的不得了要是其子异常

  对于这种限制,主要是以子类在举行向上转型的时段,不可知是地捕获异常

package thinkinginjava;

public abstract class InningDemo1 {
    public void walk() throws BaseException{}
    public abstract void sing() throws BaseException;
}

class BaseException extends Exception{}
class SubException1 extends BaseException{}
class CupException extends Exception{}

package thinkinginjava;

public interface OtherFunction {
    public void task() throws RuntimeException;
} 

 

package thinkinginjava;

public class SubInningDemo1 extends InningDemo1 implements OtherFunction{
    //子类方法可以抛出父类方法的异常
    @Override
    public void walk() throws BaseException{}

    //但不能抛出父类中没有的异常,否则编译会出错
    //public void walk() throws Exception{}

    //子类方法可以抛出父类方法的子异常
    @Override
    public void sing() throws SubException1{}

    //当实现的接口和父类中的方法都有异常时,可以选择不抛出异常
    public void task(){}

}

 

  就拿这个事例来说,假如子类中起应声办法 public void walkmanbetx手机网页版()
throws CupException{},抛来了父类方法没有底不可开交,我们应用父类的援指向子类

  public void f(){

    InningDemo1 inn = new SubInningDemo1();

    inn.walk()
;//父类调用walk()方法时,并不知道它会丢来CupException,从而f()方法不知哪捕获异常。因此当编译期就要防止子类方法乱丢弃大。

  }

  从地方的事例中,我们呢得以看出,子类方法可免废来深

 

其次、子类构造器必须使抛开来父类构造器的深要其大异常

  这是坐子类构造器中默认添加了父类的构造器

package thinkinginjava;

public abstract class InningDemo2 {
    public InningDemo2() throws SubException{

    }
}

class FatherException extends Exception{}
class SubException extends FatherException{}
class PenException extends Exception{}

package thinkinginjava;

public class SubInningDemo2 extends InningDemo2{
    public SubInningDemo2() throws FatherException {
        //子类构造器中默认添加了父类的构造器,所以需要抛出父类的异常或者其父异常
        //super();
    }
}

 

其三、异常掉

1、在finally中丢掉来大,可能会见事先抛来之不可开交掉

package thinkinginjava;

public class FinallyException {
    public static void main(String[] args){
        try{
            try{
                throw new RedException();
            }finally{
                //把上一个异常覆盖掉
                throw new BlueException();
            }
        }catch(Exception e){
            System.out.println(e);
        }
    }
}

class RedException extends Exception{}
class BlueException extends Exception{}

 

运作结果:thinkinginjava.BlueException

2、在finally中运用return,不会见扔来老

package thinkinginjava;

public class ReturnException {
    public static void main(String[] args){
        try{
            throw new Exception();
        }finally{
            return;
        }
    }
}

上述代码我们见到其抛来了深,但运行时无会见产生另输出

 

http://www.bkjia.com/Javabc/1156136.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1156136.htmlTechArticlejava异常处理(父子异常的处理),java异常处理
我那时学java异常处理的时,对于父子异常的处理,我记得几句子话子类方法只有会丢弃来父类方…

 1 public class TestException
 2 {
 3    @Test
 4    public void test1(){
 5        int [] i=new int [10];
 6        System.out.println(i[10]);
 7    }
 8    
 9    @Test
10    public void test2(){
11        System.out.println(1/0);
12    }
13    
14    @Test
15    public void test3(){
16        Object obj=new Date();
17        String str=(String) obj;
18    }
19    
20    @Test
21    public void test4(){
22        Person p=new Person();
23        p=null;
24        System.out.println(p.toString());
25    }
26 }

}

finally
中存放的凡必定会实施之代码,不管catch中是否出好要return语句。

2、抓:抓住上平等步抛出来的慌类的对象。java中提供了点滴种方法来处理一个很类的对象。

大的周转时死: 1、数组下标越界异常  2、算术异常 3、类型转化异常
4、空指针异常

  处理非常

Exception 异常 ,在编写程序时,要考虑针对这些大的处理

当执行一个序时,如果出现异常,则非常后的代码就不再执行

处理方式一: try{

Error 错误 程序中无处理

 java.lang.Throwable

1、抛
:当我们履行代码时,一旦出现异常,就会见当特别的代码处生成一个遥相呼应之良类型的对象,并拿之目标抛来。一旦丢来此类型的靶子,那么程序终止执行,此十分类的目标抛给艺术的调用者

}catch( exception e){

处理方式二:

    可能摒弃来怪的代码

  一定要是履的代码(可选)

java 提供的凡十分处理的抓抛模型

} finally{

若catch 大抵独十分类型,是一视同仁关系,catch的相继没有涉嫌;若catch
的特别是含关系,则范围小之(子类)一定要是描写在(父类)上面。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图