如果java中的对象和类名相同,如何静态调用方法

时间:2013-01-28 15:51:00

标签: java

class SomeClass
{
    static public void someStaticMethod(){};
}

SomeClass SomeClass=new SomeClass();
SomeClass.someStaticMethod();

如何调用对象名与类名相同的任何类的静态方法?

3 个答案:

答案 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'来自哪里!!!)