美文网首页
编译时与运行时

编译时与运行时

作者: BestbpF | 来源:发表于2018-09-17 22:17 被阅读33次

    简述

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

    • 编译时,就是将我们编写的.java文件编译为机器可以识别的.class字节码文件
    • 运行时,就是将.class文件装载到JVM内存中并生成对应的Class类的过程
      (这里描述的比较简略,如有错误,谢谢指出!)

    举例

    【方法重载】

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

    【方法覆盖(重写)】

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

    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)之分

    相关文章

      网友评论

          本文标题:编译时与运行时

          本文链接:https://www.haomeiwen.com/subject/dltjnftx.html