Предисловие
Как разработчики Java, мы создаем большое количество объектов каждый день, но мы всегда используем системы управления зависимостями (например, Spring Frameworks) для создания этих объектов. На самом деле, есть и другие способы создания объектов, которые я подробно расскажу в следующей статье.
1. Используйте новые ключевые слова
Это самый распространенный способ создания объектов, и это также очень просто. Используя этот метод, мы можем вызвать любой конструктор, который нам нужно позвонить.
Сотрудник EMP1 = новый сотрудник (); 0: новый #19 // класс org/программирование/mitra/change/intompleee 3: dup 4: infokespecial #21 // Метод org/программирование/Mitra/Упражнения/Сотрудник. "" :() V
2. Используйте метод класса NewInstance Class
Мы также можем использовать метод NewInstance класса класса для создания объектов. Этот метод NewInstance вызывает конструктор без параметра для создания объекта.
Мы можем создавать объекты, используя newInstance () следующим образом:
Employee emp2 = (сотрудник) class.forname ("org.programming.mitra.exercises.employee"). Newinstance ();или
Сотрудник EMP2 = employee.class.newinstance (); 51: Invokevirtual #70 // Метод Java/lang/class.newinstance :() ljava/lang/object;
3. Используйте метод NewInstance класса конструктора
Подобно методу newInstance с использованием класса класса, в классе newInstance() в классе java.lang.reflect.Constructor , который можно использовать для создания объектов. Используя этот метод newInstance , мы также можем вызвать параметризованные конструкторы и частные конструкторы.
Конструктор <Сотрудник> Constructor = employee.class.getConstructor (); Employee emp3 = constructor.newinstance (); 111: Invokevirtual #80 // Метод java/lang/Refert/constructor.newinstance: ([ljava/lang/object;) langa/lang/object;
Эти методы newInstance() считаются средствами для создания объектов. Фактически, метод newInstance() внутреннего класса использует метод newInstance() класса конструктора. Вот почему последнее предпочтительнее и использует различные рамки, такие как Spring, Hibernate, Struts и т. Д.
4. Используйте метод клона
Фактически, всякий раз, когда мы называем метод clone , виртуальная машина Java создает для нас новый объект и копирует содержимое предыдущего объекта в этот новый объект. Создание объекта с использованием метода clone не вызывает каких -либо конструкторов.
Чтобы использовать метод clone() в объекте, нам необходимо реализовать клонируемый тип и определить метод клона.
Сотрудник EMP4 = (сотрудник) emp3.clone (); 162: Invokevirtual #87 // Метод org/программирование/mitra/deciryse/usmentee.clone () ljava/lang/object;
5. Используйте десериализацию
Всякий раз, когда мы сериализуем и десериализуем объект, виртуальная машина Java создает для нас отдельный объект. При десериализации виртуальная машина Java не использует какой -либо конструктор для создания объектов.
Сериализация объекта требует, чтобы мы реализовали сериализуемый интерфейс в классе.
ObjectInputStream in = new ObjectInputStream (new FileInputStream ("data.obj")); сотрудник EMP5 = (сотрудник) in.ReadObject (); 261: InvokeVirtual #118 // Метод Java/IO/ObjectPutStream.ReadObject :() ljava/lang/object; Как мы можем видеть в приведенном выше байтовом фрагменте кода, за исключением первого, преобразованного в новую функцию и invokespecial инструкцию, все 4 метода называются и преобразуются в invokevirtual .
Пример
Давайте посмотрим на класс Employee , который готов создать объект:
Сотрудник класса реализует клонируемые, сериализуемые {частный статический окончательный длинный длинный сериал -версиид = 1L; Приватное название строки; public employee () {System.out.println ("Конструктор сотрудника называется ..."); } 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 + ((имя == null)? 0: name.hashcode ()); результат возврата; } @Override public boolean equals (Object obj) {if (this == obj) вернуть true; if (obj == null) вернуть false; if (getClass ()! = obj.getClass ()) вернуть false; Сотрудник другой = (сотрудник) OBJ; if (name == null) {if (ore.name! = null) вернуть false; } else if (! name.equals (ore.name)) вернуть false; вернуть истину; } @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) бросает исключение {// с помощью нового ключевого слова Employee Emp1 = new Employee (); emp1.setname ("naresh"); System.out.println (emp1 + ", hashcode:" + emp1.hashcode ()); // с помощью метода класса класса NewInstance () сотрудник EMP2 = (сотрудник) class.forname ("org.programming.mitra.exercises.employee") .newinstance (); // или мы можем просто сделать это // employee emp2 = employee.class.newinstance (); EMP2.SetName ("Риши"); System.out.println (emp2 + ", hashcode:" + emp2.hashcode ()); // с использованием метода конструктора Constructor Class () Constructor <memplyee> constructor = employee.class.getConstructor (); Сотрудник EMP3 = Constructor.newinStance (); EMP3.SetName ("йогеш"); System.out.println (emp3 + ", hashcode:" + emp3.hashcode ()); // с помощью метода Clone () сотрудник EMP4 = (сотрудник) EMP3.Clone (); EMP4.SetName ("atul"); System.out.println (emp4 + ", hashcode:" + emp4.hashcode ()); // с помощью Deserialization // serialization objectOutputStream 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], Hashcode: -1968815046mployeee Constructor под названием ... сотрудник [name = rishi], Hashcode: 78970652mployeee Constructor Constructor Came: name = hashcode: -1641292792m2m2modee [name = hashcode: -16412927792m2emodee [name = hashcode: -16412927792m2m2modeee [name = hashcode: -16412927792m2. 2051657mployee [name = akash], Hashcode: 63313419
Вышеуказанный контент составляет около 5 различных методов создания объектов в Java. Я надеюсь, что вам будет полезно изучить Java. Спасибо за поддержку Wulin.com.