- 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();
}
}
运行结果如下:
可以看到,实际调用的是子类的方法,这是因为程序调用的方法在运行期才动态绑定,绑定的是实现类的具体方法,而不是引用类的方法。所以调用的是子类的方法。
- finally的作用?
答:finally 是异常处理语句结构的一部分,finally块里的代码最后一定会被执行。 - finalize的作用?
答:finalize是Object类的一个方法,在垃圾收集时会调用被回收对象的这个方法,可以重写这个方法来提供垃圾收集时的其他操作,例如一些资源的回收。不过JVM不保证这个方法总会被调用。 - 运行时异常与一般异常有何异同?
答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。所以对于运行时异常例如空指针异常,我们可以不处理,因为也能编译通过。不过对于一般异常我们就一定要处理,要么捕获向外扔,要么捕获做自定义处理,不然无法通过编译。 - 请写出你最常见到的5个runtime exception(运行时异常)?
答:NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常
IndexOutOfBoundsException - 下标越界异常
IllegalArgumentException - 传递非法参数异常
ArithmeticException - 算术运算异常
NumberFormatException - 数字格式异常 - throws,throw,try catch的作用?
答:throws:捕获并向外抛出异常
throw:抛出异常,一般我们可以根据业务自定义异常抛出
try catch:内部捕获异常并做自定义处理 - Exception和Error有什么区别?
答:Exception和Error都是继承于Throwable类。如果在程序正常运行的情况下,是不会发生Exception的,但是一旦Exception发生,我们可以对其捕获并处理。而Error一旦发生,会直接导致JVM不可处理或者不可恢复的情况,所以这种异常是不可能抓取到的。 - Java中的IO流分为几种?
答:按照流的方向区分:输入流和输出流
按照流的操作单元来分:字节流和字符流 - 字节流和字符流有什么区别?
答: 字节流传输数据是以字节为单位,字符流传输数据以字符为单位。字符流用到了缓冲区,而字节流没有。 - Switch能否用String类型做参数?
答:在JDK1.7之前,switch 只能支持 byte、short、char、int 这几个基本数据类型和其对应的封装类型以及Enum类型,不过在JDK1.7后,String类型的参数被支持。这里的支持实际上就是把String类型的参数通过String.hashCode()方法转换成int类型,然后再做判断。