class SomeClass
{
static public void someStaticMethod(){};
}
SomeClass SomeClass=new SomeClass();
SomeClass.someStaticMethod();
如何调用对象名与类名相同的任何类的静态方法?
答案 0 :(得分:4)
您无需执行任何操作 - 它将按原样运行(尽管使用这种令人困惑的代码毫无意义)。
JLS #6.5.2中指定了如何处理不明确的名称。特别是:
如果AmbiguousName是一个简单的名称,由一个标识符组成:
- 如果标识符出现在本地变量声明(第14.4节)或参数声明(第8.4.1节,§8.8.1,§14.20)或具有该名称的字段声明(第8.3节)的范围(第6.3节)内,然后将AmbiguousName重新分类为ExpressionName。
- [...]
- 否则,如果在包含标识符的编译单元(第7.3节)中声明了该名称的类型,则可以通过单一类型导入声明(第7.5.1节)或类型导入 - 需求声明(第7.5.2节),或通过单静态导入声明(第7.5.3节),或通过静态导入按需声明(第7.5.4节),然后将AmbiguousName重新分类为类型名。
因此,在您的情况下,SomeClass
将是您在上面声明一行的变量,它优先于类型。
答案 1 :(得分:3)
变量名称不应大写,因此您可以:
SomeClass.someStaticMethod();
表示静态的:
someClass.someNonStaticMethod();
表示非静态版本。
答案 2 :(得分:0)
不要使用大写字母启动实例名称!
你应该写:
SomeClass someClass=new SomeClass();
或更好:
SomeClass someObject=new SomeClass();
如果您遵循这些非常常见的规则,则不会出现此问题。 (我想猜猜这个'-1'来自哪里!!!)