30得票9回答
测试final字段的初始化安全性

我正在尝试测试JLS所保证的final字段初始化安全性,以供我撰写论文。然而,根据我的当前代码,我无法使其“失败”。请问有人能告诉我我做错了什么,或者这只是需要一遍又一遍地运行,然后在某些不幸的时机看到失败吗? 以下是我的代码:public class TestClass { fi...

30得票2回答
最终字段初始化顺序

这里有一些代码调用尚未初始化的类上的静态方法A.f()。能否有人根据JLS解释一下此代码的行为?class A { final static Object b = new B(); final static int S1 = 1; final static Intege...

29得票5回答
JLS的哪些部分支持将已检查异常作为未检查异常抛出?

我最近发现并写了一篇博客,介绍了一种可以通过javac编译器将已检查异常传递到不应该抛出的位置的方法。这在Java 6和7中编译和运行,会抛出一个SQLException,而没有throws或catch子句: public class Test { // No throws cla...

25得票2回答
Java编译器如何为具有多个边界的参数化类型选择运行时类型?

我希望更好地理解当Java编译器遇到像下面这样的方法调用时会发生什么。 <T extends AutoCloseable & Cloneable> void printType(T... args) { System.out.println(args.getCla...

25得票2回答
在Java中,对volatile的写操作是否属于内存屏障?

我最近听到一次演讲中说,对volatile的写入会触发每个线程已写入变量的内存屏障。这是真的吗?根据JLS,似乎只有相关变量被清除,但不包括其他变量。有人知道实际正确的情况吗?能否指出JLS中具体的位置?

22得票1回答
指定通配符上限时是否有明显区别?

假设我有一个通用的类 Generic<A extends BaseType>。 就Java语言规范而言,下面这两个类型声明之间是否有显著差异? Generic<?> Generic<? extends BaseType> 嵌套通配符怎么办? Lis...

22得票2回答
Java中的Capture Conversion是什么,能否举例说明?

我注意到JLS谈到了5.1.10捕获转换(Capture Conversion),但我不理解它们是什么。 有人能给我解释一下或举例说明吗?

21得票3回答
为什么带有varargs的Java方法会被标识为瞬态?

我正在使用Java反射API进行实验,发现带有可变参数列表的方法会变成瞬态。为什么会这样,这种情况下transient关键字是什么意思? Java词汇表中,transient的定义如下: “Java编程语言中的一个关键字,表示字段不是对象序列化形式的一部分。当对象被序列化时,其瞬态字段的值...

20得票2回答
Java类型转换:是编译器错了,还是语言规范错了,还是我错了?

我一直在阅读Java语言规范第三版,并发现规范与javac编译器实现之间存在差异。Eclipse编译器也存在相同的差异。 第15.16节讨论了强制类型转换表达式。它指出,如果参数类型无法通过强制类型转换(第5.5节)转换为目标类型,则应该在编译时报错: 如果操作数的编译时类型根据强制类型...

19得票4回答
"根据JLS,'T.super'是合法的表达式吗?"

考虑以下表达式集合: class T {{ /*1*/ Object o = T.super; // error: '.' expected /*2*/ o.toString(); }} 试图编译这段代码将在/*1*/行失败,并显示以下错误信息:fail error: '.' ...