14得票2回答
以下代码是否能在Java 1.8下编译?

给定以下类: public class FooTest { public static class Base { } public static class Derived extends Base { } public interface Se...

13得票2回答
Java: 方法重载解析与可变参数 -- 令人困惑的例子

就在我认为我理解了JLS15.12在可变参数方面的应用时,看到了这个例子:package com.example.test.reflect; public class MethodResolutionTest2 { public int compute(Object obj1, Ob...

13得票1回答
Java中的“fresh type variable”

在JLS的转换和提升章节中,“新鲜类型变量”是什么意思?

13得票5回答
注解属性必须是一个类字面值吗?为什么?常量也应该可以。

可以有人解释一下为什么String和Class注解参数的期望不同吗?为什么编译器要求Classes使用字面量,而同时接受字符串常量呢? 使用Spring的@RequestMapping的工作示例:public class MyController { public static fi...

13得票4回答
在对象构造函数完成之前引用对象的问题

大家都知道 JMM 的这个特性,有时在对象的构造函数完成之前,对对象的引用可能会接收到值。 在 JLS7, p. 17.5 的 final Field Semantics 中,我们也可以读到: final 字段的使用模型很简单:在对象的构造函数中设置该对象的 final 字段;不要在另一...

13得票1回答
JLS是否要求对最终字符串常量进行内联处理?

我在操纵一些字节码时遇到了一个问题,在Java编译器(Java 8)中某个特定的final String 常量没有被内联,以下是示例:public class MyTest { private static final String ENABLED = "Y"; private st...

12得票2回答
为什么Java中的常量除以零不会产生编译时错误?

可能是重复问题: 1/0是合法的Java表达式吗? 为什么这段代码可以编译通过? class Compiles { public final static int A = 7/0; public final static int B = 10*3; publi...

12得票10回答
Java中是否保证从左到右的操作顺序?

考虑以下函数:public static final int F(int a, int b) { a = a - 1 + b; // and some stuff return a; } 实现JVM的过程中是否必须在执行+ b之前执行- 1? 如果我们连接了系统分析器...

12得票3回答
关于Enum类型中静态块的执行顺序和构造函数的关系是怎样的?

这段来自《Effective Java》:// Implementing a fromString method on an enum type private static final Map<String, Operation> stringToEnum = n...

12得票4回答
Java中的volatile访问不能被重排序,这是真的吗?

注意 当我说一个内存访问可以(或不能)被重新排序时,我指的是它可以相对于任何其他内存访问由编译器在发出字节码时、JIT在发出机器代码时或CPU在乱序执行时(可能需要屏障来防止这种情况)进行重新排序。 经常听说访问volatile变量由于Happens-Before关系(HBR)而不能被重...