以下代码如何工作?

时间:2010-02-10 13:08:13

标签: java static methods invocation

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

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

代码输出为hi

11 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:5)

您无需实例化Test以调用静态方法。你的主要看起来像这样:

public static void main(String[] args) {
    Test.test();
}

答案 2 :(得分:3)

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

ClassName.methodName(args);

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

您还可以使用像

这样的对象引用来引用静态方法
instanceName.methodName(args)

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

所以在你的情况下:

Test.test();

test();

来自main方法。

答案 3 :(得分:2)

尝试:

Test.test();

答案 4 :(得分:1)

您在同一个班级,只需从test()拨打main()

答案 5 :(得分:1)

for (Method m : Class.forName ("Test").getDeclaredMethods ()) {
   if (Modifier.isStatic (m.getModifiers ()) {
      m.invoke (null);
   }
}

仅适用于lulz

答案 6 :(得分:0)

class Test { 
    public static void test() { 
        System.out.println("hi"); 
    } 

    public static void main(String[] args) { 
        Test.test();
    }
}

答案 7 :(得分:0)

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

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

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

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

Test.test();

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

它的工作原理是因为在使用引用调用静态方法时,引用未使用。编译器查看调用该方法的表达式的声明/静态/编译时类型,并使用该类型查找静态方法。

通过在变量上调用静态方法,你什么都得不到,你可能会混淆那些认为正在进行多态调用的人。