如何调用类/静态方法

时间:2013-07-01 10:00:10

标签: java class oop object

在阅读The Ruby Programming Language时,我发现,在与类同名的对象上调用类方法。

我发现objective-c也从blog做了类似的事情。这里的类恰好是元类的实例。

作为另一种主要的面向对象语言,我很想知道Java如何实现/实现这一目标。

修改

我很欣赏每个人的答案。但我的问题不是如何调用类方法。许多答案都在回答这个问题。如果我的问题没有得到很好的解决,或者它给了你一个错误的想法,那就道歉。

6 个答案:

答案 0 :(得分:2)

在Java中我们可以使用类名称调用静态方法。像

ClassName.staticMethod(args);

请记住,它们是类级别的方法和变量,而不是任何对象,这就是为什么它们被类名称调用。
在编译任何带有错误的java程序时,您可以通过JVM查看其实时演示,因为main也是一种静态方法

public class TradingSystem {

    String description = "electronic trading system";

    public static void main(String[] args) {
        description = "commodity trading system";
    }
}

无法对非静态字段描述进行静态引用

  at TradingSystem.main(TradingSystem.java:8)

另请参阅10 points about static keyword in Java AND 以下是the doc

答案 1 :(得分:1)

参考JLS

  

总是在不引用特定对象的情况下调用类方法。

当Java虚拟机调用类方法时,它会根据对象引用的类型选择要调用的方法,该方法在编译时始终为静态(早期)绑定所知。

答案 2 :(得分:1)

  

静态方法在其声明中具有static修饰符,应该使用类名调用,而不需要创建类的实例,如

ClassName.methodName(args)

此外,静态方法通过在其前面加上类名来调用,例如,Math.max(i,j);.奇怪的是,它也可以用一个对象来限定,这将被忽略,但是将使用该对象的类。

Official Docs

答案 3 :(得分:1)

在Java语言中,在类而不是对象上调用静态方法,例如System.currentTimeMillis。因此,概念上这与Ruby,ObjC,Smalltalk等非常相似。

与Ruby和Objective C不同,没有对象实例可以调用这些方法:Java字节码有一个特殊的字节码指令来调用静态方法;此字节码指令不使用堆栈中的对象指针:

INVOKESTATIC "java/lang/System" "currentTimeMillis" "()J"

使用反射时,静态方法的这种特殊处理由以下事实表示:您不需要指定调用该方法的对象。相反,您可以提供null作为通话目标。

答案 4 :(得分:0)

使用类本身调用静态方法或变量。 e.g。

如果您在班级public static Integer age中有Employee的静态成员,则可以使用Employee.age

调用它

同样也适用于方法。例如Employee.paySalary();

让我们考虑一个例子。

public class StaticDemo {


    public static void methodToPrintSomething(){
        System.out.println("printing any crap");
    }

    public static void main(String[] args) {

        StaticDemo.methodToPrintSomething();

        StaticDemo obj = new StaticDemo();
        obj .methodToPrintSomething();


    }

}

此处使用obj.methodToPrintSomething()调用方法。您可以找到另一个有趣的事情是声明obj.methodToPrintSomething()。我们正在创建一个调用静态方法的对象,但这并不意味着我们在对象上调用methodToPrintSomething()。由于它是static,因此语句obj.methodToPrintSomething()将在内部被视为StaticDemo.methodToPrintSomething()

答案 5 :(得分:0)

在java中,静态方法属于类而不是该类的对象。因此,className将静态方法称为:

ClassName.staticMethod();