На днях у меня был разговор с коллегой об этом.
Есть очевидный вариант - использование конструктора, но какие еще есть способы?
Существует четыре различных способа создания объектов в Java:
В. С помощью ключевого слова new<БР> Это наиболее распространенный способ создания объекта в Java. Почти 99% объекты создаются таким образом.
MyObject object = new MyObject();
Б. С Помощью Класса.forName()`<БР> Если мы знаем имя класса & если у него есть конструктор по умолчанию, мы можем создать объект таким образом.
MyObject object = (MyObject) Class.forName("subin.rnd.MyObject").newInstance();
С. Используя клон()
<БР>
Клон() может использоваться, чтобы создать копию существующего объекта.
MyObject anotherObject = new MyObject();
MyObject object = (MyObject) anotherObject.clone();
Д. Используя объект десериализации`<БР> Объект десериализации ничего, кроме создания объекта от его сериализованной форме.
ObjectInputStream inStream = new ObjectInputStream(anInputStream );
MyObject object = (MyObject) inStream.readObject();
Вы можете прочитать их из здесь.
Существуют различные способы:
...
) вызов метода (не конструктор для массивов).или в
" Наша".toCharArray()[0]`.новой
ключевое слово, а также.В языке Java, единственный способ создать объект, вызвав его конструктор, будь то явно или неявно. Используя результаты отражения в вызове метода конструктора, десериализации использует отражение, чтобы вызвать конструктор, методы фабрики поместить вызов конструктора абстрактного строительства и клонирование аналогично завернутые вызов конструктора.
Да, вы можете создавать объекты с помощью отражения. Например, `string.класс.метод newinstance () даст вам новый пустой объект String.
Есть пять различных способов создания объекта в Java
1. С помощью ключевого слова new → конструктор вызывается
Employee emp1 = new Employee();
2. Используя метод newinstance()
метод класс
→ конструктор вызывается
Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee")
.newInstance();
Это может также быть написано как
Employee emp2 = Employee.class.newInstance();
3. Используя метод newinstance()метод
конструктор` → конструктор вам называется
Constructor<Employee> constructor = Employee.class.getConstructor();
Employee emp3 = constructor.newInstance();
4. Способ использования клон ()
→ без вызова конструктора
Employee emp4 = (Employee) emp3.clone();
5. Используя десериализации → без вызова конструктора
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
Employee emp5 = (Employee) in.readObject();
Первые три метода "нового" сайта и как метод newinstance () есть вызов конструктора, но через два клона и десериализации методы создания объектов без вызова конструктора.
Все вышеперечисленные способы имеют разный байт-код, связанный с ними, читая различные способы создания объектов в Java с примерами]1 примеры и более подробное описание, например, байт-код, преобразование всех этих методов.
Однако можно утверждать, что создание массива или объекта String является также способом создания объекта, но эти вещи более характерные для некоторых классов только и обрабатываются непосредственно в JVM, пока мы можем создать объект любого класса, используя эти 5 способов.
Также, вы можете десериализации данные в объект. Это не'т пройти через конструктор класса !
Обновление : спасибо тому, что указали в вашем комментарии ! И Майкл тоже экспериментировал.
Это проходит через конструктор наиболее производного несериализуемых суперкласса. И когда этот класс не имеет никакой-args конструктор, а InvalidClassException бросается на де-сериализации.
Пожалуйста, увидеть Тома'ы ответьте на полное лечение всех случаях ;-) https://stackoverflow.com/questions/2103089/is-there-any-other-way-of-creating-an-object-without-using-new-keyword-in-java/2103578#2103578
Также вы можете использовать
Object myObj = Class.forName("your.cClass").newInstance();
Есть такой тип объекта, который может'т быть построен нормальный экземпляр механизмы создания (вызова конструкторов): массива. Массивы создаются с
A[] array = new A[len];
или
A[] array = new A[] { value0, value1, value2 };
Как Шон сказал в комментарии, это синтаксически похож на вызов конструктора и внутренне это не намного больше, чем выделение и ноль-инициализация (инициализация или с сексуального содержания, во втором случае) блока памяти, с некоторыми заголовке указать тип и длину.
При передаче аргументов с varargs методом, массив там созданы (и заполнены) неявно тоже.
Четвертый способ будет
A[] array = (A[]) Array.newInstance(A.class, len);
Конечно, клонирование и десериализация работает здесь тоже.
Существует множество методов для стандартных API, который создает массив, но все они по сути используют один (или несколько) из этих способов.
Другими способами, если мы не являются исчерпывающими.
anewarray
, multianewarray
, newarray
или новый
. Они могут быть добавлены с помощью библиотек, таких как ASM или как bcel. Версия как bcel поставляется с Oracle'ы на Java. Опять же, это не'т вызвать конструктор, но вы можете вызвать конструктор как отдельный звонок.new
(при вызове конструктора)clazz.метод newinstance()
(что опять же вызывает конструктор). Или clazz.getConstructor(..).метод newinstance(..)` (опять же через конструктор, но вы можете таким образом выбрать один)Подводя итог ответа - одним основным способом - путем вызова конструктора объекта'S-класса.
Обновление: еще один ответ перечисленные два способа, которые не связаны с использованием конструктора - deseralization и клонирование.
Отражение:
someClass.newInstance();
Отражения также будет делать эту работу для вас.
SomeClass anObj = SomeClass.class.newInstance();
еще один способ создать новый экземпляр класса. В этом случае, вам также нужно обрабатывать исключения, которые могут быть брошенным.
Есть пять различных способов создания объектов в Java:
<Н3>1. Используя новые
ключевое слово:</Н3>
Это наиболее распространенный способ создания объекта в Java. Почти 99% объекты создаются таким образом.
MyObject object = new MyObject();//normal way
<Н3>2. Используя метод фабрики:</Н3>
ClassName ObgRef=ClassName.FactoryMethod();
Пример:
RunTime rt=Runtime.getRunTime();//Static Factory Method
<Н3>3. С помощью концепции клонирования:</Н3>
С помощью клона(), то
клон () может использоваться, чтобы создать копию существующего объекта.
MyObjectName anotherObject = new MyObjectName();
MyObjectName object = anotherObjectName.clone();//cloning Object
<Н3>4. С Помощью Класса.forName()`:</Н3>
Если мы знаем имя класса & если у него есть конструктор по умолчанию, мы можем создать объект таким образом.
MyObjectName object = (MyObjectNmae) Class.forName("PackageName.ClassName").newInstance();
Пример:
String st=(String)Class.forName("java.lang.String").newInstance();
<Н3>5. Используя десериализацию объекта:</Н3>
Объект десериализации ничего, кроме создания объекта от его сериализованной форме.
ObjectInputStreamName inStream = new ObjectInputStreamName(anInputStream );
MyObjectName object = (MyObjectNmae) inStream.readObject();
Способ 1
Используя новое ключевое слово. Это наиболее распространенный способ создания объекта в Java. Почти 99% объекты создаются таким образом.
Employee object = new Employee();
Способ 2
Используя Класс.forName(). Класс.forName() дает вам объект класса, который пригодится для размышлений. Методы, которыми этот объект определяется с помощью Java, а не программист, пишущий класса. Они одинаковы для каждого класса. Вызова newinstance (), которая дает вам экземпляра этого класса (т. е. callingClass.forName (на"класса exampleclass и").метод newinstance() это эквивалентно вызову нового класса exampleclass()), на которые вы можете вызывать методы, что класс определяет, доступа к полям и т. д.
Employee object2 = (Employee) Class.forName(NewEmployee).newInstance();
Класс.forName() всегда будет использовать загрузчик классов абонента, в то время как загрузчиком.loadClass() можно указать другой загрузчик классов. Я считаю, что класс.forName инициализирует загруженного класса, в то время как загрузчик классов.loadClass() подход не сделать это прямо сейчас (это не инициализируется, пока он используется впервые).
Еще следует читать:
Ява: состояние потока введение пример Простой Пример На Java Перечислимые
Способ 3
Использование clone(). Клон() может использоваться, чтобы создать копию существующего объекта.
Employee secondObject = new Employee();
Employee object3 = (Employee) secondObject.clone();
Способ 4
Используя метод newinstance()
Object object4 = Employee.class.getClassLoader().loadClass(NewEmployee).newInstance();
Метод 5
Используя Десериализацию Объекта. Объект десериализации ничего, кроме создания объекта от его сериализованной форме.
// Create Object5
// create a new file with an ObjectOutputStream
FileOutputStream out = new FileOutputStream("");
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"));
Employee object5 = (Employee) ois.readObject();
С точки зрения пользователя API, другой альтернативы конструкторы статические методы фабрики (как типа BigInteger.метод valueOf()), хотя для автора API (и технически и"реальные" и) объекты по-прежнему создается с помощью конструктора.
Зависит от того, что именно вы имеете в виду под словом "создать", но некоторые другие - да:
существует также загрузчиком.loadClass(String), а это не часто используется.
и если вы хотите быть полным юристом об этом, массивы технически объекты, из-за массив'ов .длина собственность. поэтому инициализация массива создает объект.