jls相关内容

方法引用表达式为&Quot;Exact&Quot;的条件

考虑JLS的以下文章(§15.13.1) 如果以标识符结尾的方法引用表达式满足以下所有条件,则它是精确的: 如果方法引用表达式具有ReferenceType::[TypeArguments]标识符格式,则ReferenceType不表示原始类型。 要搜索的类型正好有一个成员方法,其名称标识符可由出现方法引用表达式的类或接口访问。 此方法不是变量(§8.4.1)。 如果此方法是泛型 ..
发布时间:2022-09-22 19:20:51 Java开发

Java 类名区分大小写

如果一个人在不同的目录中使用相同的不区分大小写的名称编写两个公共 Java 类,那么这两个类在运行时都不能使用.(我在 Windows、Mac 和 Linux 上使用多个版本的 HotSpot JVM 进行了测试.如果有其他 JVM 可以同时使用它们,我不会感到惊讶.)例如,如果我创建一个名为 a 和一个像这样命名的 A : //小写/src/testcase/a.java打包测试用例;公共类一 ..
发布时间:2022-01-16 12:12:05 Java开发

是“public static final"吗?Java 接口中的常量是多余的吗?

此代码: 接口配置{INT MAX_CONN = 20;} 按照我的预期编译和工作.看起来是这样的: 接口配置{公共静态最终 int MAX_CONN = 20;} 对于 Java 接口中的常量来说,“public static final"是多余的吗?对于 Java 1.1、1.2、1.3、1.4、...、1.8,这是真的还是在 Java 版本中发生了变化? 解决方案 Inter ..
发布时间:2021-12-31 14:48:21 Java开发

为什么接口中没有静态方法,但静态字段和内部类可以?[Java8 之前的]

这里有一些关于为什么不能在接口中定义静态方法的问题,但没有一个解决基本的不一致问题:为什么可以在接口中定义静态字段和静态内部类型,但不能定义静态方法? 静态内部类型可能不是一个公平的比较,因为这只是生成新类的语法糖,但为什么是字段而不是方法? 反对接口中的静态方法的一个论点是它破坏了 JVM 使用的虚拟表解析策略,但这不应该同样适用于静态字段,即编译器可以直接内联它吗? 一致性是 ..
发布时间:2021-12-31 14:19:08 Java开发

写入 volatile 是 Java 中的内存屏障吗

我最近在一次演讲中听到,对 volatile 的写入会为线程已写入的每个变量触发内存屏障.那真的正确吗?从 JLS 来看,似乎只有相关的变量被刷新,而不是其他变量.有谁知道什么是真正正确的?可以告诉我 JLS 中的具体位置吗? 解决方案 Volatile 变量的引用和其他变量是正确的.我没有意识到happens-before 的传递性是必须由VM 实现的,而不是遵循定义的.我仍然感到困惑, ..
发布时间:2021-12-28 22:50:07 Java开发

Lambda 表达式和方法重载的疑惑

好的,所以方法重载是一件坏事™.现在这已经解决了,让我们假设我实际上想要重载这样的方法: static void run(Consumer consumer) {System.out.println(“消费者");}静态无效运行(函数函数){System.out.println(“函数");} 在 Java 7 中,我可以使用非歧义匿名类作为参数轻松调用它们: run(new Consume ..
发布时间:2021-12-23 21:50:29 Java开发

如何创建已知类型的类文字:Class>

采取以下措施: public Class>获取对象类型(){//我可以在这里返回什么?} 我可以从这个方法返回什么样的类文字表达式来满足泛型并编译?List.class 不会编译,List.class 也不会编译. 如果您想知道“为什么",我正在编写 Spring 的 FactoryBean> 的实现,这需要我实现 Class>getObjectType().然 ..
发布时间:2021-12-15 09:43:29 Java开发

JLS 如何指定术语“抽象方法"、“具体方法"?和“默认方法"?

我在某些 StackOverflow 答案中看到了术语抽象方法、具体方法和默认方法的“不同"定义. Java 语言规范给出的真正定义是什么?请在您的答案中包含相关的支持 JLS 参考. 解决方案 下面的链接/部分编号取自 Java 11 版本的 Java 语言规范. 根据 JLS8.4.3.1: "abstract 方法声明将方法作为成员引入,提供其签名(第 8.4.2 ..
发布时间:2021-11-26 16:39:46 Java开发

如果你覆盖一个类的子类中的一个字段,该子类有两个同名(不同类型)的字段?

我有 3 个班级: 公共类Alpha {公众号;}公共类 Beta 扩展了 Alpha {公共字符串编号;}公共类 Gama 扩展了 Beta {公众号;} 为什么下面的代码会编译?而且,为什么测试通过没有任何运行时错误? @Test公共无效测试(){最终 Beta a = new Gama();a.number = "它是一个字符串";((Alpha) a).number = 13;((G ..
发布时间:2021-11-25 18:18:45 Java开发

JLS 如何指定术语“抽象方法"、“具体方法"?和“默认方法"?

我在某些 StackOverflow 答案中看到了术语抽象方法、具体方法和默认方法的“不同"定义. Java 语言规范给出的真正定义是什么?请在您的答案中包含相关的支持 JLS 参考. 解决方案 下面的链接/部分编号取自 Java 11 版本的 Java 语言规范. 根据 JLS8.4.3.1: "abstract 方法声明将方法作为成员引入,提供其签名(第 8.4.2 ..
发布时间:2021-11-25 09:09:36 Java开发

仅包含子包的按需导入声明

相关:我如何编译“import pack.*"用ant/javac,什么时候没有这样的类? 假设我们有给定的包结构 父|- -一种---b 其中包parent只包含两个子包a和b(包parent下没有类>). 代码import parent.*,位于除parent 之外的包中,使用Maven(即javac)编译时抛出编译-时间错误.错误是: 包父级不存在 我查看了有关这 ..
发布时间:2021-11-22 16:43:05 Java开发

JLS 是否需要内联最终字符串常量?

我在操作一些字节码时遇到了一个问题,其中某个 final String 常量没有被 java 编译器 (Java 8) 内联,请参见下面的示例: 公共类MyTest{private static final String ENABLED = "Y";私有静态最终字符串禁用=“N";私有静态布尔值是启用的(字符串键){返回 key.equals("A");}私有静态字符串getString(字符串 ..
发布时间:2021-11-22 16:24:42 Java开发

Java 转换:是编译器错了,还是语言规范错了,还是我错了?

我一直在阅读 Java 语言规范第 3 版,并发现我认为规范与 javac 编译器实现之间存在差异.Eclipse 编译器中也存在同样的差异. 第 15.16 部分讨论了强制转换表达式.它说,如果参数类型不能通过强制转换(第 5.5 节)转换为强制类型,则应该是编译时错误: 如果根据转换转换规则(第 5.5 节),操作数的编译时类型可能永远不会转换为转换运算符指定的类型,那么这是一个编 ..
发布时间:2021-11-22 16:13:57 Java开发

“变量xxx可能尚未初始化".调用静态方法时,该方法返回类型相同且类型本身名称相同的变量

为什么它失败并显示以下错误?我不确定在JLS的哪个位置可以找到执行类似操作的限制. 公共类A {静态A foo(){返回null;}公共静态void main(String [] args){A A = A.foo();}} 编译时错误 A.java:14:错误:变量A可能尚未初始化A A = A.foo();^1个错误 解决方案 该变量将隐藏同名的类.这就是为什么有命名约定的部分 ..
发布时间:2021-05-18 21:00:30 Java开发