2013-12-12 36 views
0

我一直在从互联网下载一个.java文件,其中包含一些我不太熟悉的代码。该文件的名称是“Class1.java”。Java:1.1:从该类创建类的实例。 1.2:线程实例化

Class1.java

public class Class1 implements Runnable { 
     public static Class1 instantiation1 = null; 

     public static void main(String[] args) { 
       instantiation1 = new Class1(); 

       (new Thread(instantiation1)).start(); 
     } 

     public void run() { 
       /* Do whatever the threads should do. 
       I don't think this part is so important... */ 
     } 
} 

1.1:从该类创建类的实例。

public static Class1 instantiation1 = null; 
instantiation1 = new Class1(); 

为什么Class1制作自己的实例?这种行为是否有自己的名字?

1.2:线程化实例化。

(new Thread(instantiation1)).start(); 

它是通常使用的实例作为线程,而不是创建这样一个线程:

Thread <thread name> = new Thread(); 

我期待着问题和答案。 谢谢你的时间。

回答

1

1.1。如果要在Class1上运行实例(非静态)方法,这是正确的做法;在你的情况下,你需要这个,因为你需要将Class1实例传递给下一行的Thread构造函数。

1.2。这是正常的,你有两种方法来创建一个线程(通过扩展线程或通过实现Runnable),这里这段代码使用Runnable方法(即这是第二种方法);第一种方法是你提到的方法(但是Class1需要扩展Thread)。

1

1.1:您可能会因为名称“Class1”而感到困惑。它是类的名称,就像“Socket”,“XMLReader”或其他。这与“Class”对象无关,这是完全正常的。如果你阅读开始为Socket _socket = new Socket();这是有道理的,对吗?尝试重命名(如果使用eclipse,则使用alt-shift-R)“Class1”到“MyRunnableObject”,它会更好:)

1.2:尽管线程与“类的瞬时”无关他的名字。该对象之前已创建,现在已运行,可以是任何可运行的。重命名“instantation”到“_runnable”,突然,它更有意义:)

我觉得你被穷变量命名误导,如果不是这样,原谅我的不恰当的答案:)

+1

谢谢两位!解释说你不能使用这个类的非静态变量或方法而不操作这个类的实例本身就帮助我清理了很多东西。 C4stor;我很难理解为什么启动是在与启动指向的同一类中进行的,并且我仍然难以理解为什么代码将类的启动用作线程,要么是使用启动本身,要么是无论启动如何,它只是调用线程“Class1”。 对不起,如果我的意见有点混乱... –