方法由javac在生成的类文件中排序

Man*_*ish 11 java javac

使用JDK7,反射API已更改,现在getDeclaredMethods()返回的方法不会按照在源文件中声明的顺序返回.

现在我的问题是,javac生成的.class文件是否包含与源文件中定义的顺序相同的方法,还是可以按随机顺序编写方法?

Oak*_*Oak 8

Java语言规范二进制兼容性章节明确指出允许对类文件中的元素进行重新排序的事实:

[...]这里列出了Java编程语言支持的一些重要的二进制兼容更改:

  • [...]

  • 重新排序现有类型声明中的字段,方法或构造函数.

  • [...]

  • 重新排序类或接口的直接超接口列表.

这意味着它们出现在.class文件中的顺序不是由规范决定的.如果你想依赖它,你必须要么(1)知道你的具体实现使用与定义顺序相同的顺序(测试它,就像你做的那样,是一个好主意,但不能保证任何东西) ),或(2)自己更改订单.