问题标签 [jls]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2481 浏览

java - JLS、Java和相关技术之间有什么关系?

Java是语言,JRE是运行环境,JDK是开发工具?JLS 是说明 JRE 必须执行 x,y,z 的规范,因此使 Java 成为它的样子?这些观点是否正确,如果不是,有人可以启发我吗?

有没有我们认为是 Java 但不是的东西?我想我听说过 Android —— 是真的吗?

0 投票
2 回答
11533 浏览

java - 什么是 Java 中的捕获转换,谁能给我例子?

我注意到 JLS 谈到5.1.10 Capture Conversion,但我不明白它们是什么。

任何人都可以向我解释/举例吗?

0 投票
2 回答
208 浏览

java - 为什么Java在数字提升期间将字节和短操作数转换为整数

在数值提升过程中,将小数据类型(例如字节)扩展到 int 背后的原因是什么?难道不能直接对这些较小的数据类型执行大部分操作吗?

0 投票
10 回答
4380 浏览

java - 在 Java 中,为什么我不能写 i++++ 或 (i++)++?

当我尝试在/递减中写入后缀/前缀,然后在/递减中写入后缀/前缀时,出现以下错误:操作参数无效 ++/--

但是,根据 JLS:

所以写:

应该是可能的......有什么想法吗?

0 投票
3 回答
190 浏览

java - 不需要在 Java 中导入的情况(不寻常的限定)[已编辑问题]

我注意到有一些特殊的方法可以在 Java 中限定实体:

在这种情况下,我们用 Outer 类限定了 Inner 类,所以我们只需要导入 Outer 类:

还有其他类似的案例吗?(也就是说,出现不寻常的资格 - 不寻常的意思是不是:)fullQualifier.identifier

我不包括自动导入的情况(java.lang、原始类型等)

0 投票
5 回答
4573 浏览

java - 在 Java 中,方法/构造函数声明可以出现在另一个方法/构造函数声明中吗?

在 Java 中,方法/构造函数声明可以出现在另一个方法/构造函数声明中吗?例子:

我想不会,但我很想得到安慰。

0 投票
5 回答
680 浏览

java - 除了枚举声明之外,拥有更多枚举类型实例的缺点是什么?

尝试显式实例化枚举类型是编译时错误

(§15.9.1)。Enum 中的 final clone 方法确保了枚举常量永远不会被克隆,而序列化机制的特殊处理确保了不会因为反序列化而创建重复的实例。禁止枚举类型的反射实例化。这四件事一起确保枚举类型的实例不存在超出枚举常量定义的实例。

除了枚举声明之外,拥有更多枚举类型实例的缺点是什么?

0 投票
3 回答
2237 浏览

java - 为什么带有可变参数的 Java 方法被识别为瞬态?

我正在使用 Java Reflection API 并观察到带有可变参数列表的方法变得瞬态。为什么会这样transient?关键字在这种情况下意味着什么?

来自 Java 词汇表,瞬态

Java 编程语言中的关键字,表示字段不是对象的序列化形式的一部分。当一个对象被序列化时,它的瞬态字段的值不包括在序列表示中,而它的非瞬态字段的值被包括在内。

然而,这个定义并没有说明方法。有任何想法吗?

输出:

0 投票
2 回答
4761 浏览

java - 为什么 Java 常量除以零不会产生编译时错误?

可能重复:
1/0 是合法的 Java 表达式吗?

为什么这段代码会编译?

如果我查看编译的类文件,我可以看到 B 已被评估为 30,而 A 仍然是 7/0。

据我了解JSL,除以零的表达式不是常数。

参考:JLS 15.28

我的上述陈述是由于这一行:

编译时常量表达式是表示原始类型值的表达式

因此除以零不会被评估为原始值。

我真正不明白的是为什么编译器仍然允许这样做?为了清楚起见,我上面的代码使用“java.lang.ExceptionInInitializerError”使运行时崩溃

在我看来,编译器威胁任何最终的静态变量作为常量并评估它的编译时间。这意味着编译器已经尝试评估 A,但由于它是除以零,它就让它通过。没有编译时错误。但这看起来非常非常奇怪......编译器知道它是除以零并且它会在运行时崩溃,但它不会标记编译错误!

谁能向我解释为什么?

0 投票
9 回答
2350 浏览

java - 测试 final 字段的初始化安全性

我试图简单地测试 JLS 保证的最终字段的初始化安全性。这是为了我正在写的一篇论文。但是,根据我当前的代码,我无法让它“失败”。有人可以告诉我我做错了什么,或者这只是我必须一遍又一遍地运行然后看到一些不幸的时机失败?

这是我的代码:

我的线程这样称呼它:

我已经运行过这个场景很多很多次了。我当前的循环产生了 10,000 个线程,但我已经完成了这 1000、100000 甚至一百万个线程。仍然没有失败。对于这两个值,我总是看到 3 和 4。我怎样才能让它失败?