java虚拟机基础知识大全 java虚拟机运行原理(12)


条件编译
定义一个 final 的变量,然后在 if 语句用中它隔开代码 。
class Hello {
void main([] args) {
finalDEBUG = true;
if (DEBUG) {
.out.("Hello, world!");
}else {
// some code
}
}
}
因为编译器会对代码进行优化,对于条件永远为 false 的语句,Java 编译器将不会对其生成字节码 。
应用场景:实现一个区分DEBUG和模式的程序 。
逆变与协变用来描述类型转换(type )后的继承关系,其定义:如果A、B表示类型,f(?)表示类型转换,≤表示继承关系(比如,A≤B表示A是由B派生出来的子类);
f(?)是逆变()的,当A≤B时有f(B)≤f(A)成立;
f(?)是协变()的,当A≤B时有f(A)≤f(B)成立;
f(?)是不变()的,当A≤B时上述两个式子均不成立,即f(A)与f(B)相互之间没有继承关系 。
数组是协变的
Food food = new Fruit();
// or
food = new Meat(); // 即 把子类赋值给父类引用
Fruit []= new Fruit[3];
Food []= ; // 数组协变的
泛型是不变的
List= new ();
List= ; //错误:不可协变
= ; // 错误 :不可逆变
eat();// 错误::不可协变
void (List list){
list.add(new Apple());
}
【java虚拟机基础知识大全java虚拟机运行原理】泛型使用通配符实现协变与逆变 。PECS: -, -super.