序文
Java開発者として、毎日多数のオブジェクトを作成しますが、常に管理依存関係システム(Spring Frameworksなど)を使用してこれらのオブジェクトを作成します。実際、オブジェクトを作成する他の方法があります。これについては、次の記事で詳しく紹介します。
1.新しいキーワードを使用します
これはオブジェクトを作成する最も一般的な方法であり、非常に簡単です。この方法を使用することにより、呼び出す必要があるコンストラクターを呼び出すことができます。
従業員EMP1 =新しい従業員(); 0:新しい#19 //クラスORG/プログラミング/MITRA/エクササイズ/従業員3:DUP 4:Invokespecial#21 // Method Org/Programming/Mitra/Exercises/Employee。 "" :()v)V
2。クラスクラスのNewInstanceメソッドを使用します
クラスクラスのNewInstanceメソッドを使用して、オブジェクトを作成することもできます。このNewInstanceメソッドは、パラメーターのないコンストラクターを呼び出してオブジェクトを作成します。
次の方法でnewInstance()を使用してオブジェクトを作成できます。
従業員emp2 =(従業員)class.forname( "org.programming.mitra.exercises.employee")。newinstance();
または
従業員emp2 = employee.class.newinstance(); 51:invokevirtual#70 // method java/lang/class.newinstance :()ljava/lang/object;
3.コンストラクタークラスのNewInstanceメソッドを使用します
クラスクラスを使用したnewInstanceメソッドと同様に、オブジェクトを作成するために使用できるjava.lang.reflect.Constructorクラスには、 newInstance()関数メソッドがあります。このnewInstanceメソッドを使用することにより、パラメーター化されたコンストラクターとプライベートコンストラクターを呼び出すこともできます。
Constructor <EmployeeR> constructor = employee.class.getConstructor(); Employee Emp3 = constructor.newInstance(); 111:InvokeVirtual#80 // Method Java/Lang/Reflect/Constructor.Newinstance:([ljava/lang/object;)ljava/lang/object;
これらのnewInstance()メソッドは、オブジェクトを作成するための反射手段と見なされます。実際、内部クラスのnewInstance()メソッドは、コンストラクタークラスのnewInstance()メソッドを使用します。これが、後者が好まれSpring, Hibernate, Strutsなどのさまざまなフレームワークを使用する理由です。
4.クローン法を使用します
実際、 cloneメソッドを呼び出すたびに、Java仮想マシンは当社の新しいオブジェクトを作成し、以前のオブジェクトの内容をこの新しいオブジェクトにコピーします。 cloneメソッドを使用してオブジェクトを作成しても、コンストラクターは呼び出されません。
オブジェクトでclone()メソッドを使用するには、クローン可能なタイプを実装し、クローンメソッドを定義する必要があります。
従業員EMP4 =(従業員)EMP3.CLONE(); 162:InvokeVirtual#87 // Method org/programming/mitra/exercises/employee.clone()ljava/lang/object;
5.脱介入を使用します
オブジェクトをシリアル化して脱着するたびに、Java仮想マシンは私たちのために別のオブジェクトを作成します。脱isizationでは、Java仮想マシンは、コンストラクターを使用してオブジェクトを作成しません。
オブジェクトのシリアル化には、クラスにシリアル化可能なインターフェイスを実装する必要があります。
ObjectInputStream in = new ObjectInputStream(new FileInputStream( "data.obj")); Employee emp5 =(Employee)in.ReadObject(); 261:InvokeVirtual#118 // Method Java/io/objectinputStream.ReadObject :()ljava/lang/object;
上記のバイトコードスニペットでわかるように、最初のコードが新しい関数とinvokespecial命令に変換されることを除き、4つのメソッドはすべて呼び出され、 invokevirtualに変換されます。
例
オブジェクトを作成する準備ができているEmployeeクラスを見てみましょう。
クラスの従業員は、クローン可能でシリアル化可能な{private static final long serialversionuid = 1l;プライベート文字列名; public Employee(){system.out.println( "従業員コンストラクターCalling ..."); } public string getname(){return name; } public void setName(string name){this.name = name; } @override public int hashcode(){final int prime = 31; int result = 1; result = prime * result +((name == null)?0:name.hashcode());返品結果; } @Override public boolean equals(object obj){if(this == obj)return true; if(obj == null)falseを返します。 if(getClass()!= obj.getClass())falseを返します。従業員その他=(従業員)obj; if(name == null){if(other.name!= null)return false; } else if(!name.equals(other.name))false; trueを返します。 } @Override public String toString(){return "Employee [name =" + name + "]"; } @Override public object clone(){object obj = null; try {obj = super.clone(); } catch(clonenotsupportedexception e){e.printstacktrace(); } objを返します。 }}次のJavaプログラムでは、5つの方法を使用してEmployeeオブジェクトを作成します。
public class objectcreation {public static void main(string ... args)throws exception {//新しいキーワードEmployee Emp1 = new Employee(); emp1.setname( "naresh"); System.out.println(emp1 + "、hashcode:" + emp1.hashcode()); //クラスのclassのnewinstance()メソッド従業員emp2 =(従業員)class.forname( "org.programming.mitra.exercises.employee").newinstance()を使用して。 //または単にこれを行うことができますemp2.setname( "rishi"); system.out.println(emp2 + "、hashcode:" + emp2.hashcode()); // constructor classのnewinstance()method constructor <employement> constructor = employee.class.getConstructor()を使用して;従業員EMP3 = constructor.newinstance(); emp3.setname( "yogesh"); System.out.println(emp3 + "、hashcode:" + emp3.hashcode()); // clone()メソッドを使用して従業員emp4 =(従業員)emp3.clone(); emp4.setname( "atul"); system.out.println(emp4 + "、hashcode:" + emp4.hashcode()); // Deserializationを使用して// serialization objectputStream out = new objectOutputStream(new FileOutputStream( "data.obj")); out.writeObject(emp4); out.close(); // Deserialization objectInputStream in = new ObjectInputStream(new FileInputStream( "data.obj"));従業員emp5 =(従業員)in.ReadObject(); in.close(); emp5.setname( "akash"); System.out.println(emp5 + "、hashcode:" + emp5.hashcode()); }}このプログラムの出力結果は次のとおりです。
従業員コンストラクターコール...従業員[name = naresh]、ハッシュコード:-1968815046従業員コール...従業員[name = rishi]、ハッシュコード:78970652従業員コール[name = akash]、ハッシュコード:63313419
上記のコンテンツは、Javaでオブジェクトを作成するための約5つの異なる方法です。 Javaを学ぶことが役立つことを願っています。 wulin.comへのご支援ありがとうございます。