2

目前我正在尝试像这样调用它:

class Test {
    public static void test() {
        System.out.println("hi");
    }
    public static void main(String[] args) {
        Test t = null;
        t.test();
    }
}

代码的输出是 hi

4

11 回答 11

11

尝试Test.test()在点之前使用类名。

静态方法是在类本身而不是类的实例上调用的。

于 2010-02-10T13:09:57.803 回答
5

您无需实例化 Test 即可调用静态方法。你的主要可能是这样的:

public static void main(String[] args) {
    Test.test();
}
于 2010-02-10T13:12:33.903 回答
3

静态方法应该使用类名调用,而不需要创建类的实例,如

ClassName.methodName(args);

或者

methodName(args); // from other static methods of the same class.

您还可以使用对象引用来引用静态方法,例如

instanceName.methodName(args)

但不鼓励这样做,因为它没有明确说明它们是类方法。

所以在你的情况下:

Test.test();

或者

test();

从主要方法就可以了。

于 2010-02-10T13:15:11.110 回答
2

尝试:

Test.test();
于 2010-02-10T13:12:22.453 回答
1

你在同一个班级,你可以简单地调用test()from main()

于 2010-02-10T13:11:04.827 回答
1
for (Method m : Class.forName ("Test").getDeclaredMethods ()) {
   if (Modifier.isStatic (m.getModifiers ()) {
      m.invoke (null);
   }
}

只为 lulz

于 2010-02-10T13:34:07.433 回答
0
class Test { 
    public static void test() { 
        System.out.println("hi"); 
    } 

    public static void main(String[] args) { 
        Test.test();
    }
}
于 2010-02-10T13:12:46.723 回答
0

它之所以有效,是因为在使用引用调用静态方法时,不使用引用。编译器查看正在调用该方法的表达式的声明/静态/编译时类型,并使用该类型来查找静态方法。

通过对变量调用静态方法你什么也得不到,而且你会迷惑那些认为正在发生多态调用的人。

于 2010-02-10T17:09:01.097 回答
0

静态方法和静态变量的好处是您不需要类的实例来使用它。

通常你会创建一个实例并调用该方法

Test myClass = new Text();
myClass.test();

但是对于静态方法,第一行不是必需的,您只需要在开始时写下类名

Test.test();

但是,在静态方法中,您无法访问 Test 类中的任何实例变量——除非它们也是静态的!

于 2010-02-10T13:15:41.817 回答
0

打电话Test.test()。由于该main方法是静态的并且在同一个类中,所以您也可以直接调用test()

于 2010-02-10T13:16:13.767 回答
0

顺便一提。代码工作正常,没有任何 nullpointerexception 此代码打印 hi

我想知道当引用用于调用静态方法时内部会发生什么。

于 2010-02-10T13:25:27.917 回答