10

我知道在 OOP 中,instance=object。因此,如果我们有这样的课程:

public class something
{
    public static void main(String args[])
    {
    }
}

main 方法中的这一行会创建新对象instance吗?

something instance=new something();

我的第二个问题是类似的:如果我们创建Thread对象——Thread t1=new Thread();这是否真的意味着我们已经创建了一个类的实例Thread,我们可以从中静态调用方法?(例如sleep())。

4

4 回答 4

12

如果我们创建 Thread 对象 - Thread t1=new Thread(); 这是否真的意味着我们已经创建了类 Thread 的实例,我们可以从中静态调用方法?(例如睡眠())。

当您调用静态方法时,您不会从对象中调用它。这就是为什么它是静态的。不需要实例来执行静态方法。

例子

Thread t1 = new Thread();
t1.checkAccess();  // <--- This is an instance method.

Thread.activeCount(); // <-- This is a static method.

当您看到new关键字时,这意味着正在创建一个新对象。在这种情况下,它是 class 的一个实例Thread,正如您所说的那样。

你怎么区分他们?

嗯,很简单。如果它是一个实例方法,它将从一个对象的上下文中调用。

String str = new String("hello");
str = str.replaceAll("o", "");

如您所见,您必须创建一个实例才能使用实例方法

使用静态方法,它更容易。除了类的名称外,它们将被调用。

String.copyValueOf(new char[] {'a', 'b', 'c'});

无需创建新String实例。只需使用类的名称。

注意:正如评论中所指出的,可以从实例对象调用静态方法,但这不是常见的做法。如果您不确定,文档是您最好的朋友。或者您可以通过尝试从静态上下文中调用相同的方法来简单地进行测试。

何时使用静态方法而不是实例方法?

好吧,这已经得到了很好的回答,在这里:Java:何时使用静态方法,我认为重复它没有任何意义:)

于 2013-08-07T14:37:23.267 回答
2

在您引用的两种情况下都会创建一个对象:

something instance=new something();
Thread t1=new Thread();

但是,在第二种情况下,虽然创建了一个 Thread 对象,但直到您启动它时,才会启动一个线程。

这是否真的意味着我们已经创建了类 Thread 的实例,我们可以从中静态调用方法?(例如睡眠())。

您不需要对象来调用静态方法。静态方法适用于整个类,而不是特定的实例。您可以像这样调用 Thread.sleep() :

Thread.sleep( 500 );
于 2013-08-07T14:37:52.050 回答
1

something对于您的第一个问题,是的,这将在变量中创建一个实例instance(顺便说一下,这不是一个很好的变量名)。

对于您的第二个问题,是的,该代码将创建一个 Thread 实例。但是,您不会使用它调用静态方法(如t1.sleep())。使用类名调用静态方法,例如Thread.sleep. 您不必为这些创建实例。

于 2013-08-07T14:39:41.073 回答
0

实例不过是动态内存分配。java中的“new”运算符用于创建实例,但对象是类成员的动态内存分配,或者您可以说对象是类的实例。例如 malloc(),calloc() 是动态内存分配函数,所以我们可以说它们正在创建实例,但我们不能说它们正在创建对象。

于 2013-11-20T04:47:10.303 回答