很实用的java面试题及Java中的异常处理机制(3)
java面试题
1. 覆盖和重载是什么?
覆盖发生在子类与父类之间,子类中的方法与父类中的某个方法的名称和参数完全相同,通过子类实例调用这个方法时,将调用子类中的定义方法。
重载是指在一个类中,有多个相同名称的方法,但是他们的参数列表(个数或类型)不同,当调用该方法时,根据传递的参数类型调用对应的方法。当参数列表相同但返回值不同时,将会出现编译错误,这并不是重载,因为jvm无法根据返回值类型来判断应该调用哪个方法。
2. 构造器可被重写?
构造方法是不能重写的,但是可以重载。
3. String s=new String("xyz");创建了几个String Object?
创建了两个String对象,一个保存的引用地址,一个保存实际的值。
4. 线程的几种可用状态
就绪(Runnable):线程准备运行,不一定立马就能开始执行。
运行中(Running):进程正在执行线程的代码。
等待中(Waiting):线程处于阻塞的状态。
睡眠中(Sleeping):线程被强制睡眠。
I/O阻塞(Blocked on I/O):等待I/O操作完成。
同步阻塞(Blocked on Synchronization):等待获取锁。
死亡(Dead):线程完成了执行。
异常的捕捉
采用try…catch方式对异常进行拦截并处理,语法格式为:
可以有多个catch语句块,用来拦截不同类型的异常。
当程序运行过程中发生不同类型的异常情况,执行不同类型异常的catch语句块代码,也就是catch语句块拦截相应类型的异常并执行相关的语句块。如果程序发生没有在catch中拦截的异常类型,此异常将不会被拦截。
拦截相同类型的异常事件
try语句块中的所有编译时异常必须在catch中进行拦截。如果存在没有拦截处理的编译时异常,程序编译不能通过。或者通过throws关键字进行声明抛出。
案例:编译时异常必须进行拦截或者通过throws进行声明抛出
捕获异常的顺序
catch语句块中的异常类从上到下要按照子类到父类的顺序,否则编译不能通过。也可以采用父类的类型捕获子类类型的异常。
发生异常时的执行顺序
当try语句块中的代码发生异常情况时,程序的执行流程会直接执行拦截异常的catch语句块中的代码,当catch语句块中的代码执行结束后,会接着执行try…catch语句后面的语句。
发生异常时,执行流程会发生改变,catch语句块相当于对异常进行了处理,所以执行流程会从try…catch后面的语句继续执行,而不会从发生异常的位置继续执行,所以不要将所有的语句都放在try语句块中。
案例: