如果我们创建了Thread对象 - Thread t1 = new Thread();这是否意味着我们已经创建了Thread类的实例,从中我们可以静态调用方法? (例如sleep())。
当您调用静态方法时,不会从对象调用它。这就是为什么它是静态的。实例不需要执行静态方法。
例
Thread t1 = new Thread();
t1.checkAccess(); // <--- This is an instance method.
Thread.activeCount(); // <-- This is a static method.
当看到new
关键字,这意味着正在创建一个新对象。在这种情况下,正如你所说的那样,它是Thread
类的一个实例。
你如何区分他们?
嗯,很简单。如果是实例方法,则将从对象的上下文中调用它。
String str = new String("hello");
str = str.replaceAll("o", "");
正如你所看到的,你必须创建一个实例使用一个实例方法。
与静态方法,它更容易。他们将被称为除了班级的名字。
String.copyValueOf(new char[] {'a', 'b', 'c'});
有没有必要创建一个新的String
实例。只需使用班级的名字。
注:正如在评论中指出,一个静态方法可以从一个实例对象调用,但这不是普遍的做法。如果你不确定,文档是你最好的朋友。或者您可以简单地通过尝试从静态上下文中调用相同的方法来进行测试。
何时使用静态方法而不是实例方法?
嗯,这是回答,非常好,在这里:Java: when to use static methods,我看没有任何意义的重复吧:)
+1以简单清晰的方式提出简单问题。你很惊讶这里有多少人以复杂的方式提出简单的问题。 – christopher
我总是非常注意这一点(我家的一半人不是英国人,你有没有试过告诉一大堆阿拉伯人他们错了?这是可怕的东西)。然而,这里有些人是**英语原住民,仍然试图让自己听起来更聪明,或者使问题复杂化,像“XY问题”这样的问题。我想,虽然我看到一个简单问题的好例子,但不妨称赞OP! – christopher