是否可以从 java 中没有实例的非静态方法调用另一个 class 的静态方法?

Is it possible to call a static method of another class from a non static method without instance in java?

静态方法尽可能接近全局方法。那么为什么这种类型的方法调用是不可能的呢?有没有其他方法可以在不实例化 class 的情况下调用静态方法??

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();
        }

    }
}

你不能调用静态方法或从非静态方法调用变量,因为静态变量就像共享它们获取的一组相似的内存,然后可以作为首选使用。所以它从剩余的内存资源中分离出来。 Java 一完成就释放了它获取的资源,但是静态成员一直持续到执行结束。

我觉得你很困惑。

pgm.func();

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

p.func();

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

旁注:您在 p.x 处捕获了 NullPointerException,因此在此示例中未执行 func()

所以要回答,

Is it possible to call a static method of another class from a non static method without instance?

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

首先在 class pgm 中不允许修饰符 static。

如果你想在 class 条腿中调用 func 和 x。

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

之后你需要获取 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");
     }

  }
}

你会得到你想要的。

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

我上面提供给你的正确方法。