java基础面试题(五)

  1. java中实现多态的机制是什么?
    答:父类引用指向子类实现。具体实例代码如下:
    有一个抽象类AbstractTest类作为父类:
 public abstract class AbstractTest {

   public void print() {
        System.out.println("父类方法调用");
    }
}

有一个子类TestMain类继承AbstractTest类:

public class TestMain extends AbstractTest {
    @Override
    public void print() {
        System.out.println("子类方法调用");
    }

    public static void main(String[] args) throws Exception {
        TestMain testMain = new TestMain();
        testMain.print();
    }
}

运行结果如下:
在这里插入图片描述
可以看到,实际调用的是子类的方法,这是因为程序调用的方法在运行期才动态绑定,绑定的是实现类的具体方法,而不是引用类的方法。所以调用的是子类的方法。

  1. finally的作用?
    答:finally 是异常处理语句结构的一部分,finally块里的代码最后一定会被执行。

  2. finalize的作用?
    答:finalize是Object类的一个方法,在垃圾收集时会调用被回收对象的这个方法,可以重写这个方法来提供垃圾收集时的其他操作,例如一些资源的回收。不过JVM不保证这个方法总会被调用。

  3. 运行时异常与一般异常有何异同?
    答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。所以对于运行时异常例如空指针异常,我们可以不处理,因为也能编译通过。不过对于一般异常我们就一定要处理,要么捕获向外扔,要么捕获做自定义处理,不然无法通过编译。

  4. 请写出你最常见到的5个runtime exception(运行时异常)?
    答:NullPointerException - 空指针引用异常
    ClassCastException - 类型强制转换异常
    IndexOutOfBoundsException - 下标越界异常
    IllegalArgumentException - 传递非法参数异常
    ArithmeticException - 算术运算异常
    NumberFormatException - 数字格式异常

  5. throws,throw,try catch的作用?
    答:throws:捕获并向外抛出异常
    throw:抛出异常,一般我们可以根据业务自定义异常抛出
    try catch:内部捕获异常并做自定义处理

  6. Exception和Error有什么区别?
    答:Exception和Error都是继承于Throwable类。如果在程序正常运行的情况下,是不会发生Exception的,但是一旦Exception发生,我们可以对其捕获并处理。而Error一旦发生,会直接导致JVM不可处理或者不可恢复的情况,所以这种异常是不可能抓取到的。

  7. Java中的IO流分为几种?
    答:按照流的方向区分:输入流和输出流
    按照流的操作单元来分:字节流和字符流

  8. 字节流和字符流有什么区别?
    答: 字节流传输数据是以字节为单位,字符流传输数据以字符为单位。字符流用到了缓冲区,而字节流没有。

  9. Switch能否用String类型做参数?
    答:在JDK1.7之前,switch 只能支持 byte、short、char、int 这几个基本数据类型和其对应的封装类型以及Enum类型,不过在JDK1.7后,String类型的参数被支持。这里的支持实际上就是把String类型的参数通过String.hashCode()方法转换成int类型,然后再做判断。

发布了156 篇原创文章 · 获赞 138 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_38106322/article/details/104139334