public class Outer {
private int outerInt;
class Inner {
public void printOuterInt() {
System.out.println("Outer int = " + outerInt);
}
}
}
在执行编译之前,编译器会修改它以创建类似的东西:
public class Outer {
private int outerInt;
public int access$000() {
return outerInt;
}
}
class Inner$Outer {
Outer outer;
public void printOuterInt() {
System.out.println("Outer int = " + outer.access$000());
}
}
虽然从逻辑上讲,内部类是与外部类相同的代码实体的一部分,但它被编译为一个单独的类。因此,它需要编译器创建合成桥接方法,以提供对外部类的私有字段的访问。NestHost
和 NestMembers
。这些更改对于支持嵌套类并编译为字节码的其他语言非常有用。java.lang.Class
:
getNestHost()
getNestMembers()
isNestmateOf(Class)
CONSTANT_Dynamic
(在演示文稿中通常称为“condy”)。动态常量的想法似乎是矛盾的,但实际上,你可以把它看作Java中的最终值。常量池值不在编译时设置(与其他常量不同),但使用引导方法在运行时确定值。因此,该值是动态的,但由于其值仅设置一次,因此它也是常量。java.lang.invoke.ConstantBootstraps
,有九种新方法。我不会在这里列出所有这些; 这些是动态计算常量的引导方法。invokespecial
字节码的使用方式和第4.4节“常量池”中。
sin()
, cos()
和 log()
方法 java.lang.Math class
。
OutOfMemoryError
的抛出。jdk.jfr
和 jdk.management.jfr
。
java.util.jar
现已弃用,可能会在将来的JDK版本中删除。何时发生这种情况尚未明确。
地址:https://www.leftso.com/article/522.html