2012-03-10 107 views
0

我们有自我注册'Handler'的子类,我们想通过Subclass.me()访问它。在Java中可能类似于这种情况:?在静态Java方法中访问类

public class Handler{ 
static Vector<Handler> register=new Vector<Handler>(); 
public static Handler me() { 
     return register.get(this.class);// TODO 
} 
} 

public class SubClass extends Handler{ 
    SubClass(){register.add(this);}// OK 
} 

澄清问题:调用静态Java方法时是否可以检索CLASS?这个类明显不起作用,因为'this'不可用。

回答

4

静态方法属于该类。它们不能被覆盖。

MyClass.myStaticMethod() 

是访问静态方法的唯一正确方法。

+0

他们不需要被覆盖,但第二部分回答了这个问题。 如果MyClass.myStaticMethod()是唯一正确的道路,如何来叫Subclass.myStaticMethod()甚至不给Eclipse的一个警告? – Anno2001 2012-03-10 13:31:24

+0

@ Anno2001 Eclipse允许您选择,如果你想要得到一个错误/警告或忽略一个静态成员的非静态访问。 下看Eclipse首选项,爪哇 - >编译器 - >错误/警告 - >代码样式 - >静态成员的非静态访问。 – ddelver 2014-01-11 23:02:13

0

在java中,您无法对非静态方法/变量进行静态引用。所以,

  • 如果你想访问一个非静态方法/变量,那么你必须首先创建一个类的实例 。
  • 如果你要访问一个静态方法/变量,那么你可以 直接访问它通过类名,而无需创建 实例。

因为,静态方法和变量属于Class而不属于Instance,而非静态方法和变量属于Instance而不属于Class。