0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: java, цикл for, ветвление if-else, создание объекта через оператор new, reflection, клонирование, protected native object clone(), класс object, objectoutputstream, java.lang.object, области видимости переменных, protected, public, private, sun.reflect.magicaccessorimpl, magic accessor</p>
1
<p>Теги: java, цикл for, ветвление if-else, создание объекта через оператор new, reflection, клонирование, protected native object clone(), класс object, objectoutputstream, java.lang.object, области видимости переменных, protected, public, private, sun.reflect.magicaccessorimpl, magic accessor</p>
2
<p>В нашей программе курса<a>"Разработчик Java"</a>есть такая тема. Что такое основы Java думаем, понятно. Например, цикл<strong>for</strong>или ветвление<strong>if-else</strong>или создание объекта через оператор<strong>new</strong>.</p>
2
<p>В нашей программе курса<a>"Разработчик Java"</a>есть такая тема. Что такое основы Java думаем, понятно. Например, цикл<strong>for</strong>или ветвление<strong>if-else</strong>или создание объекта через оператор<strong>new</strong>.</p>
3
<h2>Как основы могут быть "углублёнными"?</h2>
3
<h2>Как основы могут быть "углублёнными"?</h2>
4
<p>Рассмотрим следующий базовый вопрос: как создать объект в Java? Первый и самый правильный ответ: через оператор<strong>new</strong>. Что может быть более базовым в объектно-ориентированном языке, чем</p>
4
<p>Рассмотрим следующий базовый вопрос: как создать объект в Java? Первый и самый правильный ответ: через оператор<strong>new</strong>. Что может быть более базовым в объектно-ориентированном языке, чем</p>
5
Object object = new Object();<p>Теперь усложним вопрос: как создать объект в Java без использования<strong>new</strong>? И на этот вопрос есть два ответа:<strong>Reflection</strong>и клонирование.</p>
5
Object object = new Object();<p>Теперь усложним вопрос: как создать объект в Java без использования<strong>new</strong>? И на этот вопрос есть два ответа:<strong>Reflection</strong>и клонирование.</p>
6
<p>Можно создать объект, если у вас есть объект класса<strong>Class<Т></strong>этого класса:</p>
6
<p>Можно создать объект, если у вас есть объект класса<strong>Class<Т></strong>этого класса:</p>
7
Object instance = Class.forName("java.lang.Object").newInstance();<p>То есть вы можете получить новый объект класса, зная только название этого класса (конечно, если объект типа<strong>Class<T></strong>для этого класса может быть загружен класс-лоадером).</p>
7
Object instance = Class.forName("java.lang.Object").newInstance();<p>То есть вы можете получить новый объект класса, зная только название этого класса (конечно, если объект типа<strong>Class<T></strong>для этого класса может быть загружен класс-лоадером).</p>
8
<p>Можно сделать класс<strong>Clonable</strong>и вызвать<strong>protected native Object clone()</strong>класса<strong>Object</strong>. В результате вы получите копию объекта, которую для вас сделает нативный метод.</p>
8
<p>Можно сделать класс<strong>Clonable</strong>и вызвать<strong>protected native Object clone()</strong>класса<strong>Object</strong>. В результате вы получите копию объекта, которую для вас сделает нативный метод.</p>
9
<h2>Хорошо, немного усложним задачу</h2>
9
<h2>Хорошо, немного усложним задачу</h2>
10
<p>Как создать объект в Java, не вызывая его конструктор? А кто сказал, что нельзя так сделать? Так работает<strong>ObjectOutputStream</strong>, когда десериализует объект. Вызывает</p>
10
<p>Как создать объект в Java, не вызывая его конструктор? А кто сказал, что нельзя так сделать? Так работает<strong>ObjectOutputStream</strong>, когда десериализует объект. Вызывает</p>
11
sun.reflect.ReflectionFactory.newConstructorForSerialization()<p>Фактически, создавая объект произвольного класса через вызов конструктора<strong>java.lang.Object</strong>.</p>
11
sun.reflect.ReflectionFactory.newConstructorForSerialization()<p>Фактически, создавая объект произвольного класса через вызов конструктора<strong>java.lang.Object</strong>.</p>
12
<p>Что ещё можно углублённо-базового рассмотреть? Вот, например, области видимости переменных:<strong>public</strong>,<strong>protected</strong>,<strong>private</strong>. Интересно, что о них можно углублённого рассказать? Посмотрите<strong>sun.reflect.MagicAccessorImpl</strong>. Да-да<strong>magic accessor</strong>!</p>
12
<p>Что ещё можно углублённо-базового рассмотреть? Вот, например, области видимости переменных:<strong>public</strong>,<strong>protected</strong>,<strong>private</strong>. Интересно, что о них можно углублённого рассказать? Посмотрите<strong>sun.reflect.MagicAccessorImpl</strong>. Да-да<strong>magic accessor</strong>!</p>
13
<p><em>Есть вопрос? Напишите в комментариях!</em></p>
13
<p><em>Есть вопрос? Напишите в комментариях!</em></p>
14
14