Override Private/Protected Method/Exception Catch

Override Private/Protected Method/Exception Catch

对于使用private修饰符修饰的方法,只能在当前类中访问到该方法,子类无法访问父类中定义的private方法。既然子类无法访问父类的private方法,当然也就无法重写该方法。

如果子类中定义了一个与父类private方法具有相同方法名,相同形参列表,相同返回值类型的方法,依然不是重写,只是子类中重新定义了一个新方法。如果使用@override来修饰Base类中的方法。

如果父类中定义了使用默认访问控制符(也就是不适用访问控制符)的方法,这歌方法同样可能无法被重写。

对于不使用访问控制符修饰的方法,它只能被与当前类处于同一个包中的其他类访问,其他包中的子类依然无法访问该方法。

import java.io.FileOutputStream;

import java.io.IOException;

 

public class ExitFinally {

    public static void main(String[] args) throws IOException{

      FileOutputStreamfos = null;

      try{

            fos= newFileOutputStream("a.bin");

            System.out.println("Openresource!");

            System.exit(0);

      }finally{

            if(fos != null){

                  try{

                        fos.close();

                  }catch(Exception ex ){

                        ex.printStackTrace();

                  }

            }

            System.out.println("Closeresource!");

      }

    }

}

Output:

Openresource!

这个程序的try块中增加了System.exit(0)来退出程序。如果程序在执行System.exit(0)后,finally块有时候不会执行。System.exit(0)将停止当前线程和所有其他当场死亡的线程。Finally块并不能让已经停止的线程继续执行。

当System.exit(0)被调用时,虚拟机退出前要执行两项清理工作:

执行系统中注册的所有关闭钩子;

如果程序调用了System.runFinalizerOnExit(true);那么JVM汇兑所有还未结束的对象调用Finalizer。

 

当Java运行时环境接收到异常对象时,系统会根据catch(XxxException)语句决定使用哪个异常分支来处理程序引发的异常。

通常情况下,如果try块被执行依次,则try块后只有一个catch块会被执行,决不可能有多个catch块被执行。除非在循环中使用了continue开始下一个循环,下一个循环又重新运行了try块,才可能导致多个catch块被执行。

比如,程序FileNotFoundExcetion异常是IOException的子类。根据Java继承的特性,子类其实是一种特殊的父类,也就是说,FileNotFoundException只是一种特殊的IOException。程序前面的catch块已经捕捉了IOException,这意味着FileNotFoundException不会被执行,然后编译器会抛错。

由于Exception是所有异常类的根父类,因此try..catch块应该把捕捉Exception的catch块排在所有catch块的最后面。否则,Java运行时将直接进入捕捉Exception的catch块(因为所有异常对象都是Exception或其子类的实例),而排在它后面的catch块将永远也不会获得执行的机会。当然,编译器会直接提示编译错误,阻止这样的代码获得执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值