从静态方法java返回类对象

时间:2018-07-17 17:36:28

标签: java

我正在使用静态关键字。我已经声明了一个静态方法,其返回类型是class。当我从主要方法访问此方法时,出现以下错误。我如何从该方法返回对象。

error: non-static variable this cannot be referenced from a static context
            return this;

以下是我的代码

public class StaticKeyword{

   public static StaticKeyword run(){
     return this;
   }

   public static void main(String args[]){
     System.out.println(StaticKeyword.run());
   }    
}

3 个答案:

答案 0 :(得分:4)

静态方法或静态变量属于一个类,而不是该类的实例。 this是一个指向当前引用的实例变量。

因此this不能在静态块中使用。因此,您应该将代码重新写成这样,

public static class StaticKeyword {

    public static StaticKeyword run(){
        return new StaticKeyword();
    }

    public static void main(String args[]){
        System.out.println(StaticKeyword.run());
    }    
}

还请记住,声明为静态的方法将永远保留在主内存中(即直到Java进程停止为止)。除非并且直到您将非常频繁地使用此方法,否则util类和方法之类的东西才能被设置为静态

  1. 对于每次访问而无需创建对象
  2. 为了更快地访问-由于它是静态的,因此在连续的方法调用期间该方法已经在主内存中。

当您不经常使用该方法时,最好通过创建对应类的实例来访问该方法。

答案 1 :(得分:0)

您需要将其更改为此:

public static class StaticKeyword {

    public static StaticKeyword run(){
        StaticKeyword returnObject = new StaticKeyword();
        return returnObject;
    }

    public static void main(String args[]){
        System.out.println(StaticKeyword.run());
    }    
}

答案 2 :(得分:0)

this是对当前对象的引用-当前对象的方法或构造函数正在被调用。但是,不会创建任何实例来返回。因此,您需要执行类似return new StaticKeyword()

的操作

还提示:当我学习关键字static时,我个人很挣扎。有一个很好的经验法则:问自己“即使不存在此Obj的实例,我也要调用此方法吗?”如果是这样,则您的方法应为static