繁体   English   中英

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

[英]What is the functional difference between an instance and an object?

我知道在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() )。

如果我们创建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关键字时,表示正在创建新对象。 在这种情况下,它是Thread类的一个实例,正如你正确地说的那样。

你怎么分辨他们?

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

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

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

使用静态方法,它更容易。 除了班级的名字外,他们只会被召唤。

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

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

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

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

嗯,这很好,在这里: Java:何时使用静态方法 ,我认为重复它没有意义:)

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

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

但是,在第二种情况下,虽然创建了一个Thread对象,但在启动它之前不会启动该线程。

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

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

Thread.sleep( 500 );

第一个问题,是的,这将创造的一个实例something在变量instance (不是一个伟大的变量名,顺便说一句)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM