是否可以从 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).
我上面提供给你的正确方法。
静态方法尽可能接近全局方法。那么为什么这种类型的方法调用是不可能的呢?有没有其他方法可以在不实例化 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).
我上面提供给你的正确方法。