1

在阅读The Ruby Programming Language时,我了解到,类方法是在与类同名的对象上调用的。

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

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

编辑

我感谢大家的回答。但我的问题不是关于如何调用类方法。许多答案都在回答这个问题。如果我的问题没有很好地表达或给你一个错误的想法,我深表歉意。

4

6 回答 6

2

在Java中我们可以调用类名的静态方法.like

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)


另请参阅有关 Java 中静态关键字的 10 点
这是文档

于 2013-07-01T10:03:16.533 回答
1

参考JLS

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

当 Java 虚拟机调用一个类方法时,它会根据对象引用的类型来选择要调用的方法,这在编译时总是已知的,静态(早期)绑定。

于 2013-07-01T10:04:07.810 回答
1

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

ClassName.methodName(args)

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

官方文档

于 2013-07-01T10:04:15.970 回答
1

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

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

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

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

于 2013-07-01T10:13:45.903 回答
0

使用类本身调用静态方法或变量。例如

如果您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()

于 2013-07-01T10:02:51.097 回答
0

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

ClassName.staticMethod();
于 2013-07-01T10:05:59.210 回答