我知道在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()
)。
答案 0 :(得分: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 :(得分:2)
在您引用的两种情况下都会创建一个对象:
something instance=new something();
Thread t1=new Thread();
但是,在第二种情况下,虽然创建了Thread对象,但在启动之前不会启动该线程。
它实际上是否意味着我们已经创建了Thread类的实例,我们可以从中静态调用方法? (例如sleep())。
您不需要对象来调用静态方法。静态方法适用于整个类,而不是特定实例。您可以像这样调用Thread.sleep():
Thread.sleep( 500 );
答案 2 :(得分:1)
对于您的第一个问题,是的,这将在变量something
中创建instance
的实例(顺便说一句,这不是一个很好的变量名称)。
对于第二个问题,是的,该代码将创建一个Thread实例。但是,您不会使用它调用静态方法(如t1.sleep()
)。使用类名调用静态方法,例如Thread.sleep
。您不必为这些创建实例。
答案 3 :(得分:0)
实例只不过是动态内存分配。在java中,'new'运算符用于创建实例,但对象是类成员的动态内存分配,或者您可以说object是类的实例。 例如malloc(),calloc()是动态内存分配函数,所以我们可以说它们正在创建实例但我们不能说它们正在创建对象。