一个实例和一个对象之间的功能区别是什么?

10

我知道在面向对象编程中,实例=对象。因此,如果我们有这样的类:

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

这行代码在主方法中会创建一个名为instance的新对象吗?

something instance=new something();

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


5
赞一个问出简单明了的问题。你会惊讶于这里有多少人用令人费解的方式提出简单问题。 - christopher
我一直非常注意这一点(我的家庭有一半不是英语母语者,你曾经试过告诉一群阿拉伯人他们错了吗?这是可怕的事情)。然而,在这里有些人是英语母语者,仍然试图让自己听起来更聪明,或者用像“XY问题”这样的东西使问题变得过于复杂。我想,既然我看到了一个简单问题的好例子,就应该表扬OP! - christopher
4个回答

12
如果我们创建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
值得注意的是,虽然您不需要实例来执行静态方法,但您可以这样做。编写t1.activeCount()并不是语法错误。 - Mike
1
不是这样的,但我相信大多数IDE都会抱怨你从实例对象调用静态方法,所以大多数情况下,静态方法将在类的上下文中被调用(或者至少应该如此)。 - christopher
你说得对,综合开发环境通常会发出警告。我认为这是一个很好的补充,因为这是对新程序员来说一个比较混淆的语言特性。 - Mike

2

你所提到的两种情况下都会创建一个对象:

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

然而,在第二种情况下,虽然创建了一个Thread对象,但是只有在启动它之后才会启动线程。
“这是否意味着我们创建了Thread类的实例,从中可以静态地调用方法(例如sleep())?”
不需要对象来调用静态方法。静态方法适用于整个类,而不是特定的实例。你可以像这样调用Thread.sleep():
Thread.sleep( 500 );

1
针对您的第一个问题,是的,在变量instance中创建了something的实例(顺便说一句,这不是一个很好的变量名)。
针对您的第二个问题,是的,该代码将创建一个Thread实例。但是,您不会使用它调用静态方法(例如t1.sleep())。静态方法使用类名调用,例如Thread.sleep。您不必为此创建实例。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接