Java--关于编译时、运行时以及构建时

来源:互联网 发布:mysql免安装版下载 编辑:程序博客网 时间:2024/06/10 06:36

1.final关键字

static final  int number1 = 5;static final  int number2 = 6; static int number3 = 5;static int number4= 6;public static void main(String[ ] args) {           int product1 = number1 * number2;         //line A          int product2 = number3 * number4;         //line B }

其中line A为编译时计算,line B为运行时计算。


2.方法重载与方法覆盖

方法重载:这个是发生在编译时的,方法重载也被称为编译时多态,因为编译器可以根据参数的类型来选择使用哪个方法。

方法覆盖:这个是在运行时发生的,方法重载被称为运行时多态,若子类A覆盖了父类B的方法,在编译期编译器不知道并且没法知道该去调用哪个方法,JVM会在代码运行的时候做出决定。

3.泛型

这个是发生在编译期的。编译器负责检查程序中类型的正确性,然后把使用了泛型的代码翻译或者重写成可以执行在当前JVM上的非泛型代码。这个技术被称为“类型擦除“。换句话来说,编译器会擦除所有在尖括号里的类型信息,来保证和版本1.4.0或者更早版本的JRE的兼容性。

4.异常

运行时异常:也称作未检测的异常(unchecked exception),这表示这种异常不需要编译器来检测。RuntimeException是所有可以在运行时抛出的异常的父类。一个方法除要捕获异常外,如果它执行的时候可能会抛出RuntimeException的子类,那么它就不需要用throw语句来声明抛出的异常。

例如:NullPointerException,ArrayIndexOutOfBoundsException,等等

受检查异常:都是编译器在编译时进行校验的,通过throws语句或者try{}cathch{} 语句块来处理检测异常。编译器会分析哪些异常会在执行一个方法或者构造函数的时候抛出。


5.其他

继承 – 发生在编译时,因为它是静态的

代理或者组合 – 发生在运行时,因为它更加具有动态性和灵活性。





0 0