首页 > 编程语言 >Java中的异常

Java中的异常

时间:2022-09-26 13:55:50浏览次数:46  
标签:run Fu 子类 方法 return Java 父类 异常

Java中异常分为运行时异常RuntimeException,和编译时Exception异常。编译时异常必须处理,而运行时异常可以不处理。

  • 当try catch finally中都有return语句时,finally中的return语句会覆盖前面的,也就是前面的return失效
  • 当try catch 中都有return语句时,看程序执行try还是catch代码块,然后存储该代码块中return语句中的值,等finally代码块执行完毕后再将return语句中的返回值进行返回。
  • 子类重写父类方法,方法抛出的异常类型不能大于父类被重写的方法,理由如下

class Fu{
    public void run() throws IOException {

    }
}

class Zi extends Fu{
    @Override
    public void run() throws Exception{//这里写法错的,只是演示

    }
}

class TestWhyCantBig{
    /**
     * 该类的构造方法传入的参数是Fu这个类
     * 然后在 testMethod 方法中调用了fu的run()方法,并且捕获这个方法抛出的异常
     * 如果传入的是Fu子类的对象,且该子类重写父类方法时,抛出的异常类型大于父类方法的类型。那么下面这个方法就不能捕获到子类方法的异常了
     * 逻辑有问题,所以不允许这样
     */
    private Fu fu;

    public TestWhyCantBig(Fu fu) {
        this.fu = fu;
    }

    public void testMethod(){
        try {
            fu.run();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

}
  • 子类重写父类的方法,方法的权限修饰符应该不小于父类被重写的方法
class Fu{
    void run() throws IOException {

    }
}

private class Zi extends Fu{ //这里private写法错的,只是演示
    @Override
    private void run() throws IOException{

    }
}
/**
如果说子类方法权限修饰符比父类小
根据多态,父类的引用指向子类的对象,那么此时下面的例子则无法调用z的run方法
**/

class TestWhyCantBig{

    public static void main(String[] args) {
        Fu z = new Zi();
        try {
            z.run();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    
}

标签:run,Fu,子类,方法,return,Java,父类,异常
From: https://www.cnblogs.com/pzistart/p/16730615.html

相关文章

  • Java 编码小技巧
    1、锁与事务获取锁与释放锁不能放在事务里面。先释放锁再提交事务会导致脏数据。2、consumer使用consumer来传递一个lambda表达式publicstaticvoidmain(String[]a......
  • JavaWeb基础
    JaveWeb常识JaveWeb主要就是web应用的后端数据库数据库设计数据库一对一表的情况有用户表和用户详情这种,分表的意义在于性能高些。一对多表设计,比如部门和员工表,......
  • 终端直接执行.java文件
    1、首先编译java文件 javacxx.java 「最好先建一个空文件夹,把xx.java文件放入」2、然后执行javaxx 「这样就会直接执行了,不需要使用Idea,eclipse等IDE」 注意:x......
  • Java多线程
    join()方法使用:【已经开了3个线程ABC,要求线程A在线程B的前面执行,线程B在线程C的前面执行】https://blog.csdn.net/zds448588952/article/details/99613648......
  • 多线程——Robyn编程学习(Java)
    多线程的作用能够创建多个线程,此外线程可以体现程序的动态性,提高效率,在抢票以及各种游戏之中具有非常重要的作用。(线程的魅力在坦克大战中体现的淋漓尽致)多线程的知识体......
  • JAVA 反射与模块化
    JAVA反射与模块化类加载类的初始化步骤假如类还未被加载和连接,则程序现在加载并连接该类假如该类的直接父类还未被初始化,则先初始化其直接父类假如类中有初始化语......
  • 【记录】学习 阿里巴巴Java开发手册 (持续更新)
    前言在这里记录一下自己学习编码的规范和规约的过程,希望可以纠正自己的不良习惯,让编码更加规范和合理,具有更加好的可读性。阿里巴巴Java开发手册v1.3.0分为六个部分。针......
  • 【code基础】java 空数组
    解题时,如果不满足返回空数组,可以使用newint[0]返回@TestpublicvoidintTest(){int[]ints=newint[0];//指定元素个数为0,表示空数组int[]ints1=newint[......
  • Android studio 开发 app 遇到的异常 汇总记录
    Timber请求api返回未注册后往注册页面跳转时,触发了异常:E/ActivityThread:Activitycom.yangdejian.timber.activities.MainActivityhasleakedServiceConnectioncom.y......
  • java中overload与override的区别
    1、综述重写(Override)也称覆盖,它是父类与子类之间多态性的一种表现,而重载(Overload)是一个类中多态性的一种表现。override从字面就可以知道,它是覆盖了一个方法并......