是否可以从非静态方法调用另一个类的静态方法而不使用java中的实例?

时间:2016-07-14 04:37:26

标签: java static static-methods

静态方法尽可能接近全局方法。那么为什么这种方法调用不可能呢?有没有其他方法来调用静态方法而不实例化类??

import java.io.*;
import java.util.*;
class pgm
{
    int x,v;
    static void func()
    {
        System.out.println("Function run");
    }
}
class egs
{
    public static void main(String args[])
    {
        pgm p=null;
        pgm.func();
        try
        {
            p.x=10;
            p.func();
        }
        catch(NullPointerException e)
        {
            e.printStackTrace();
        }

    }
}

3 个答案:

答案 0 :(得分:1)

首先在类pgm中不允许使用modifier。

如果你想在课堂上调用func和x。

您必须使用public final然后使用您的类名,并将类的所有成员声明为静态。

之后你需要获得class pgm的参考。

所以你的代码将是

  import java.io.*;
  import java.util.*;
  public final class pgm
  {
     static int x,v;
     static void func()
     {
      System.out.println("Function run");
     }
   }

  class egs
  {
   public static void main(String args[])
   {
     pgm p=null;         //ref here 
      p.func();          // use ppm func here 
      try
      {
        p.x=10;
        p.func();
      }
      catch(NullPointerException e)
     {
        System.out.println("Null caught");
     }

  }
}

你会得到你想要的东西。

永远不会混淆静态用于在编译时编译整个块,方法,变量,因此您可以在运行时调用任何静态的内容而无需任何实例化(使用新的)

正确的方式我在上面提供你。

答案 1 :(得分:0)

我觉得你很困惑。

pgm.func();

调用静态方法的正确方法。而......

p.func();

即使p为null(因为它在您的代码中)仍然会被执行,因为编译器确实使用第一种方式,因为它知道该方法是静态的。

旁注:您正在p.x捕获NullPointerException,因此在此示例中不会执行func()

所以回答,

  

是否可以在没有实例的情况下从非静态方法调用另一个类的静态方法?

是的,因为您从不需要实例来调用静态方法

答案 2 :(得分:-1)

您不能从非静态方法调用静态方法或变量,因为静态变量就像共享由它们获取的类似内存集,然后可以作为首选使用。所以它与剩余的内存资源分开了。 Java一旦完成就释放了它获得的资源,但静态成员一直持续到执行结束。