2016-06-24 7 views
2

私は "new"キーワードと class.forName()の使用を知っています。 しかし、私はメソッドの定義を記述しながらオブジェクトを作成できることを知りました。 のようにmethodName(オブジェクトの作成);Javaでオブジェクトを作成する方法はいくつありますか?

+2

達成したいことはありますか? –

+0

'Class.forName()'の代わりに 'Class.newInstance()'を意味しますか? –

+0

何を言っているのか分かりません。 newとreflection(newInstance()または特定のコンストラクタオブジェクトのどちらかを使用)のみがあります。しかし、匿名の内部クラスのインスタンスを作成している場合でも、** new **で始まります。 – GhostCat

答えて

4

これらはすべてオブジェクトの作成方法です。

方法1:

新しいキーワードを使用しました。これはjavaでオブジェクトを作成する最も一般的な方法です。このようにしてオブジェクトのほぼ99%が作成されます。

Object object = new Object(); 

方法2:

にClass.forName()を使用します。 Class.forName()は、リフレクションに役立つクラスオブジェクトを提供します。このオブジェクトが持つメソッドは、Javaで定義され、プログラマがクラスを記述することではありません。それらはすべてのクラスで同じです。 newInstance()を呼び出すと、そのクラスのインスタンス(つまり、callingClass.forName( "ExampleClass")。newInstance()はnew ExampleClass()を呼び出すのと等価です)を呼び出すと、クラスが定義するメソッドを呼び出すことができます。 ClassLoader.loadClass一方()は、異なるクラスローダを指定することができる、等常に呼び出し元のクラスローダを使用する

CrunchifyObj object2 = (CrunchifyObj) 
    Class.forName("crunchify.com.example.CrunchifyObj").newInstance(); 

にClass.forName()を可視フィールドにアクセスします。 Class.forNameはロードされたクラスも初期化すると考えていますが、ClassLoader.loadClass()のアプローチではすぐには実行されません(最初に使用されるまでは初期化されません)。

METHOD 3:

クローンを使用して()。 Object::clone()は、既存のオブジェクトのコピーを作成するために使用できます。

CrunchifyObj secondObject = new CrunchifyObj(); 
CrunchifyObj object3 = (CrunchifyObj) secondObject.clone(); 

方法4:

Class::newInstance()方法を使用。 Oracle Tutorialを参照してください。

Object object4 = CrunchifyObj.class.getClassLoader().loadClass("crunchify.com.example.CrunchifyObj").newInstance(); 

METHOD 5:

Object Deserializationを使用します。オブジェクトの逆シリアル化は、serializedフォームからオブジェクトを作成することだけです。

// create a new file with an ObjectOutputStream 
FileOutputStream out = new FileOutputStream("crunchify.txt"); 
ObjectOutputStream oout = new ObjectOutputStream(out); 

// write something in the file 
oout.writeObject(object3); 
oout.flush(); 

// create an ObjectInputStream for the file we created before 
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("crunchify.txt")); 
CrunchifyObj object5 = (CrunchifyObj) ois.readObject(); 

METHOD 6:

java.lang.reflectパッケージ、Java Reflection施設の一部からConstructorクラスを使用します。

Class clazz = CrunchifyObj.class; 
Constructor crunchifyCon = clazz.getDeclaredConstructors()[0]; 
CrunchifyObj obj = (CrunchifyObj) crunchifyCon.newInstance(); 
関連する問題