Din*_*mar 9 java static-methods static-members
静态内部类M和M[类C]的静态成员如何共享同一个名称?
以下代码生成"White"作为输出:
public class Amazed{
public static void main(String[] args) {
System.out.println(B.M.W);
}
}
class B {
public static class M {
static String W = "Black";
}
static C M = new C();
}
class C {
String W = "White";
}
Run Code Online (Sandbox Code Playgroud)
如何访问成员对象而不是静态类成员:W ["Black"]
如果我想访问静态类M中的成员怎么做?
Java 语言规范的第 6 章(特别是第 6.5 节)详细说明了 Java 如何整理特定标识符在特定上下文中的含义的可怕细节。规则相当复杂,但粗略地说,Java 有六个名称空间:
相同的标识符可用于每个名称空间中的实体。请注意,类型(类)名称和字段名称是分开的,这解释了为什么您的代码是合法的。
同一名称空间中的继承名称有时也可能被隐藏或屏蔽。有时标识符是不明确的;然后需要以某种方式对其进行限定(例如,使用包名称),否则编译器会抱怨。
代码混淆器充分利用了这一点,最终您可以得到一个名为 package 的包a.a和一个名为ain package的类a(也将被标识为a.a)。更不用说 Java 关键字如do和for是 .class 文件中的合法名称(但在 Java 源代码中则不然)。它有助于使逆向工程成为真正的熊。
| 归档时间: |
|
| 查看次数: |
215 次 |
| 最近记录: |