[英]how does the following code work
目前我正试图像这样调用它:
class Test {
public static void test() {
System.out.println("hi");
}
public static void main(String[] args) {
Test t = null;
t.test();
}
}
代码的输出是hi
在点之前尝试使用类名称的Test.test()
。
静态方法在类本身上调用,而不是类的实例。
您不需要实例化Test来调用静态方法。 你的主要看起来像这样:
public static void main(String[] args) {
Test.test();
}
应该使用类名调用静态方法,而不需要创建类的实例,如
ClassName.methodName(args);
要么
methodName(args); // from other static methods of the same class.
您还可以使用对象引用来引用静态方法
instanceName.methodName(args)
但这是不鼓励的,因为它没有说明它们是类方法。
所以在你的情况下:
Test.test();
要么
test();
从主要方法来做。
尝试:
Test.test();
你在同一个班级,你可以简单地从main()
调用test()
main()
。
for (Method m : Class.forName ("Test").getDeclaredMethods ()) {
if (Modifier.isStatic (m.getModifiers ()) {
m.invoke (null);
}
}
只为lulz
class Test {
public static void test() {
System.out.println("hi");
}
public static void main(String[] args) {
Test.test();
}
}
静态方法和静态变量的好处是你不需要类的实例来使用它。
通常,您将创建一个实例并调用该方法
Test myClass = new Text();
myClass.test();
但是使用静态方法时,第一行不是必需的,您只需要在开头编写类名
Test.test();
但是,在静态方法中,您无法访问Test类中的任何实例变量 - 除非它们也是静态的!
调用Test.test()
。 由于main
方法是静态的并且在同一个类中,因此您也可以直接调用test()
。
顺便说说。 代码工作正常,没有任何nullpointerexception此代码打印hi
我想知道在使用引用来调用静态方法时内部会发生什么。
它的工作原理是因为在使用引用调用静态方法时, 不使用引用。 编译器查看调用该方法的表达式的声明/静态/编译时类型,并使用该类型查找静态方法。
通过在变量上调用静态方法,您什么都得不到,并且您可能会混淆那些认为正在发生多态调用的人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.