编译时与运行时

2018-09-17  本文已影响33人  BestbpF

简述

编译时与运行时使我们在使用学习Java中经常会遇到的概念,那么什么是编译时,什么又是运行时呢?

举例

【方法重载】

方法重载发生在编译时,被称为编译器多态,编译器可以根据参数类型选择调用哪个方法

【方法覆盖(重写)】

方法覆盖发生在运行时,被称为运行时多态,如下列代码所示

public class A {
     public void hello() {
         System.out.println("Hello A!");  
     }
}
public class B extends A {
    @Override 
    public void hello() {
         System.out.println("Hello B!");  
    }
}
public void test(A ref){
    ref.hello();
}

编译期无法知道test方法传入的参数是A还是B,因此无法决定调用哪个hello方法,只有传入ref进入运行时才能够决定调用哪个hello方法

【泛型(类型校验)】

泛型发生在编译期,编译期通过泛型判断程序中类型的正确性,如

List<String> list = new ArrayList<String>();

传入非String类型则会报错
进入运行时,泛型会被擦除,这种技术被称为【类型擦除】

【注解】

自定义注解时,可以设置编译时或者运行时,下面介绍几个常用的注解
【@Override】
@Override注解用于标注一个重写的方法,它是一个简单的编译时注解,目的也很简单,就是防止你写错方法名称,参数等,因为重写方法与原方法必须一致,你写错了就会提示报错信息
【@Test】
JUnit框架中使用该注解来在运行时反射调用测试类的方法

【异常】

Exception也有运行时异常(RuntimeException)和编译时异常(checked exception)之分

上一篇下一篇

猜你喜欢

热点阅读