0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Это базовые знания языка java, которым стоит уделить пристальное внимание. Изучайте документацию и дополнительные материалы<strong>обязательно</strong>, не спешите, задавайте вопросы, перечитывайте, возвращайтесь периодические к материалам этого урока.</p>
1
<p>Это базовые знания языка java, которым стоит уделить пристальное внимание. Изучайте документацию и дополнительные материалы<strong>обязательно</strong>, не спешите, задавайте вопросы, перечитывайте, возвращайтесь периодические к материалам этого урока.</p>
2
<p><em>Java является объектно-ориентированным языком, поэтому такие понятия как "класс" и "объект" играют в нем ключевую роль. Любую программу на Java можно представить как набор взаимодействующих между собой объектов.</em></p>
2
<p><em>Java является объектно-ориентированным языком, поэтому такие понятия как "класс" и "объект" играют в нем ключевую роль. Любую программу на Java можно представить как набор взаимодействующих между собой объектов.</em></p>
3
<p><em><strong>Тип</strong></em>- это то, что определяет свойства объекта. Название типа соответствует имени своего класса. Все свойства объекта описаны в классе.</p>
3
<p><em><strong>Тип</strong></em>- это то, что определяет свойства объекта. Название типа соответствует имени своего класса. Все свойства объекта описаны в классе.</p>
4
<p><em><strong>Объект</strong></em>- это экземпляр, созданный по шаблону соответствующего типа.</p>
4
<p><em><strong>Объект</strong></em>- это экземпляр, созданный по шаблону соответствующего типа.</p>
5
<p>О чем говорит "тип" в мире java:</p>
5
<p>О чем говорит "тип" в мире java:</p>
6
<ol><li><strong>Размер</strong>, который поле будет занимать в памяти компьютера;</li>
6
<ol><li><strong>Размер</strong>, который поле будет занимать в памяти компьютера;</li>
7
<li><strong>Мета-информация</strong>- это набор различных данных, которые объект может в себе хранить и набор методов (функций), которыми он может что-то делать.</li>
7
<li><strong>Мета-информация</strong>- это набор различных данных, которые объект может в себе хранить и набор методов (функций), которыми он может что-то делать.</li>
8
</ol><p>Согласно спецификации JVM, типы группируются так:</p>
8
</ol><p>Согласно спецификации JVM, типы группируются так:</p>
9
<ul><li><strong>Примитивные</strong>primitive types - быстрые в чтении/записи</li>
9
<ul><li><strong>Примитивные</strong>primitive types - быстрые в чтении/записи</li>
10
<li><strong>Не примитивные</strong>reference types, они же ссылочные - сложны и медленны, но могут работать с большими значениями и обладают дополнительным функционалом</li>
10
<li><strong>Не примитивные</strong>reference types, они же ссылочные - сложны и медленны, но могут работать с большими значениями и обладают дополнительным функционалом</li>
11
</ul><p>Согласно документации, перечень примитивов ограничен:</p>
11
</ul><p>Согласно документации, перечень примитивов ограничен:</p>
12
<ul><li><strong>byte</strong>- 8bit (целочисленный)</li>
12
<ul><li><strong>byte</strong>- 8bit (целочисленный)</li>
13
<li><strong>short</strong>- 16bit (целочисленный)</li>
13
<li><strong>short</strong>- 16bit (целочисленный)</li>
14
<li><strong>int</strong>- 32bit (целочисленный)</li>
14
<li><strong>int</strong>- 32bit (целочисленный)</li>
15
<li><strong>long</strong>- 64bit (целочисленный)</li>
15
<li><strong>long</strong>- 64bit (целочисленный)</li>
16
<li><strong>char</strong>- 16bit (символьный, только один символ). Обозначается в одинарных кавычках. Например: 'a', 'D', '1', '9', '' и любые одиночные символы. Объекты char всегда заключены в одинарные кавычки.</li>
16
<li><strong>char</strong>- 16bit (символьный, только один символ). Обозначается в одинарных кавычках. Например: 'a', 'D', '1', '9', '' и любые одиночные символы. Объекты char всегда заключены в одинарные кавычки.</li>
17
<li><strong>float</strong>- 32bit (дробный)</li>
17
<li><strong>float</strong>- 32bit (дробный)</li>
18
<li><strong>double</strong>- 64bit (дробный)</li>
18
<li><strong>double</strong>- 64bit (дробный)</li>
19
<li><strong>boolean</strong>- 1bit, true или false, 0 или 1, правда/ложь (когда-то его не было в JVM)</li>
19
<li><strong>boolean</strong>- 1bit, true или false, 0 или 1, правда/ложь (когда-то его не было в JVM)</li>
20
</ul><p>У каждого примитива есть свои классы-обертки, которые уже являются не примитивами. У int - это Integer, у char - это Character и так далее.</p>
20
</ul><p>У каждого примитива есть свои классы-обертки, которые уже являются не примитивами. У int - это Integer, у char - это Character и так далее.</p>
21
<p>Все примитивные типы ограничены в своих значениях. Читаем об этом в ссылках на необходимые дополнительные материалы.</p>
21
<p>Все примитивные типы ограничены в своих значениях. Читаем об этом в ссылках на необходимые дополнительные материалы.</p>
22
<p>Для целочисленных вычислений эффективнее использовать тип int. Поскольку на уровне JVM для типов byte и short реализованы не все инструкции, как в случае с int. Вот<a>в этом разделе спецификации JVM</a>вы увидите количество определенных операций для целочисленных типов.</p>
22
<p>Для целочисленных вычислений эффективнее использовать тип int. Поскольку на уровне JVM для типов byte и short реализованы не все инструкции, как в случае с int. Вот<a>в этом разделе спецификации JVM</a>вы увидите количество определенных операций для целочисленных типов.</p>
23
<p>Поэтому используйте byte и short только для хранения массивов данных. При любых вычислениях с целыми числами - они автоматически будут приведены к типу int еще на этапе компиляции.</p>
23
<p>Поэтому используйте byte и short только для хранения массивов данных. При любых вычислениях с целыми числами - они автоматически будут приведены к типу int еще на этапе компиляции.</p>
24
<p>Например, для записи набора целочисленных данных в файле лучше использовать byte или short, в зависимости от необходимости. А, например, для счетчика (i++ он же: i += 1, i = i + 1) лучше использовать тип int. Даже если этот счетчик никогда не превысит значение 3, поскольку Java Virtual Machine просто легче работать с int.</p>
24
<p>Например, для записи набора целочисленных данных в файле лучше использовать byte или short, в зависимости от необходимости. А, например, для счетчика (i++ он же: i += 1, i = i + 1) лучше использовать тип int. Даже если этот счетчик никогда не превысит значение 3, поскольку Java Virtual Machine просто легче работать с int.</p>
25
<p>Не примитивы (ссылочные типы) делятся на три основных вида:</p>
25
<p>Не примитивы (ссылочные типы) делятся на три основных вида:</p>
26
<ul><li><p><strong>class types</strong>- Это фактически любой класс в мире java. Например:</p>
26
<ul><li><p><strong>class types</strong>- Это фактически любой класс в мире java. Например:</p>
27
<ul><li>String - тип, который хранит в себе строки. Строки отличаются от char тем, что могут хранить в себе от нуля до более двух миллиардов символов. Объекты String всегда заключены в двойные кавычки: "моя строка"; даже если это один символ: "ф", "9", "j","" и т.д.</li>
27
<ul><li>String - тип, который хранит в себе строки. Строки отличаются от char тем, что могут хранить в себе от нуля до более двух миллиардов символов. Объекты String всегда заключены в двойные кавычки: "моя строка"; даже если это один символ: "ф", "9", "j","" и т.д.</li>
28
<li>Long - тип-обертка над примитивом long. Позволяет производить дополнительные операции над численным типом. Например, конвертируя его в String или наоборот.</li>
28
<li>Long - тип-обертка над примитивом long. Позволяет производить дополнительные операции над численным типом. Например, конвертируя его в String или наоборот.</li>
29
<li>Object - это супер-класс для всех классов, базовый класс в мире java. От него наследуются все остальные классы. И даже те, которые будете создавать Вы.</li>
29
<li>Object - это супер-класс для всех классов, базовый класс в мире java. От него наследуются все остальные классы. И даже те, которые будете создавать Вы.</li>
30
</ul><p>Отдельным подвидом<strong>class types</strong>являются классы-перечисления: enum<strong>(enumerators)</strong>. О них будет отдельный урок.</p>
30
</ul><p>Отдельным подвидом<strong>class types</strong>являются классы-перечисления: enum<strong>(enumerators)</strong>. О них будет отдельный урок.</p>
31
</li>
31
</li>
32
<li><p><strong>array types</strong>- массив является специальным типом. Он предназначен для содержания в себе любых других типов, в том числе и массивов (многомерные массивы). За это он и определен в отдельный вид. С массивами мы познакомимся ближе, в четвертом модуле.</p>
32
<li><p><strong>array types</strong>- массив является специальным типом. Он предназначен для содержания в себе любых других типов, в том числе и массивов (многомерные массивы). За это он и определен в отдельный вид. С массивами мы познакомимся ближе, в четвертом модуле.</p>
33
</li>
33
</li>
34
<li><p><strong>interface</strong>- это третий специальный вид типов - пока просто запоминаем. Детально рассмотрим их далее по курсу, чтобы не перегружать этот, и так сложный, урок.</p>
34
<li><p><strong>interface</strong>- это третий специальный вид типов - пока просто запоминаем. Детально рассмотрим их далее по курсу, чтобы не перегружать этот, и так сложный, урок.</p>
35
</li>
35
</li>
36
</ul><p><strong><em>Откуда берутся эти все не примитивные типы:</em></strong>любой класс в java, включая написанный вами, является ссылочным типом (не примитивом), который можно применять в других классах.</p>
36
</ul><p><strong><em>Откуда берутся эти все не примитивные типы:</em></strong>любой класс в java, включая написанный вами, является ссылочным типом (не примитивом), который можно применять в других классах.</p>
37
<p>Все ссылочные типы<strong>обязательно пишутся с большой буквы</strong>.</p>
37
<p>Все ссылочные типы<strong>обязательно пишутся с большой буквы</strong>.</p>
38
<h2>Системы исчисления</h2>
38
<h2>Системы исчисления</h2>
39
<ul><li>десятичная (0,1, 2, 3, 4, 5, 6, 7, 8, 9) --> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,<strong>10</strong>, 11, 12, 13, 14,15, 16, 17, 18, 19,<strong>20</strong>, 21...</li>
39
<ul><li>десятичная (0,1, 2, 3, 4, 5, 6, 7, 8, 9) --> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,<strong>10</strong>, 11, 12, 13, 14,15, 16, 17, 18, 19,<strong>20</strong>, 21...</li>
40
<li>пятеричная (0, 1, 2, 3, 4) --> 0, 1, 2, 3, 4,<strong>10</strong>, 11, 12, 13, 14,<strong>20</strong>, 21, 22, 23, 24...</li>
40
<li>пятеричная (0, 1, 2, 3, 4) --> 0, 1, 2, 3, 4,<strong>10</strong>, 11, 12, 13, 14,<strong>20</strong>, 21, 22, 23, 24...</li>
41
<li>двоичная (0, 1) --> 0, 1,<strong>10</strong>, 11,<strong>100</strong>, 101, 110, 111...</li>
41
<li>двоичная (0, 1) --> 0, 1,<strong>10</strong>, 11,<strong>100</strong>, 101, 110, 111...</li>
42
</ul><p>Рекомендую к прочтению, для лучшего понимания систем исчисления:</p>
42
</ul><p>Рекомендую к прочтению, для лучшего понимания систем исчисления:</p>
43
<ul><li>Прекрасная и очень правильная<a>статья о системах счисления</a>.</li>
43
<ul><li>Прекрасная и очень правильная<a>статья о системах счисления</a>.</li>
44
<li>Перевод в<a>двоичную систему на пальцах</a>.</li>
44
<li>Перевод в<a>двоичную систему на пальцах</a>.</li>
45
</ul><h2>Знаковость и без-знаковость численных типов</h2>
45
</ul><h2>Знаковость и без-знаковость численных типов</h2>
46
<p>До Java 8 все примитивные типы были только подписанными (знаковыми). Но<em>начиная c Java 8</em>Integer и Long<strong>могут быть</strong>не подписанными (unsigned). Но только не на уровне самих примитивов, а на уровне операций с ними. Есть полноценный API позволяющий выполнять все базовые операции над не подписанным (unsigned) числом, как то, например:</p>
46
<p>До Java 8 все примитивные типы были только подписанными (знаковыми). Но<em>начиная c Java 8</em>Integer и Long<strong>могут быть</strong>не подписанными (unsigned). Но только не на уровне самих примитивов, а на уровне операций с ними. Есть полноценный API позволяющий выполнять все базовые операции над не подписанным (unsigned) числом, как то, например:</p>
47
<p>- сравнение:<a>https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#compareUnsigned-long-long-</a>- деление:<a>https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#divideUnsigned-long-long-</a>- взятие остатка от деления:<a>https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#remainderUnsigned-long-long-</a></p>
47
<p>- сравнение:<a>https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#compareUnsigned-long-long-</a>- деление:<a>https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#divideUnsigned-long-long-</a>- взятие остатка от деления:<a>https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html#remainderUnsigned-long-long-</a></p>
48
<p>Для понимания знаковой/без-знаковой величины пример:</p>
48
<p>Для понимания знаковой/без-знаковой величины пример:</p>
49
<ul><li>подписанные величины (signed) --> допустим 4 bit в двоичной (<strong>?_010</strong>) --> max = 7, min = -7. Первый бит уходит под знак, а остальные уже для кодировки числа.</li>
49
<ul><li>подписанные величины (signed) --> допустим 4 bit в двоичной (<strong>?_010</strong>) --> max = 7, min = -7. Первый бит уходит под знак, а остальные уже для кодировки числа.</li>
50
<li>не подписанные величины (unsigned) --> допустим 4 bit в двоичной (<strong>1010</strong>) --> max = 15, min = 0. Первый бит участвует в кодировке числа.</li>
50
<li>не подписанные величины (unsigned) --> допустим 4 bit в двоичной (<strong>1010</strong>) --> max = 15, min = 0. Первый бит участвует в кодировке числа.</li>
51
</ul><h2>Необходимые дополнительные материалы</h2>
51
</ul><h2>Необходимые дополнительные материалы</h2>
52
<ul><li><p><a>Официальный The Java™ Tutorials от Oracle по примитивным типам данных.</a>Расскажет об особенностях применения.</p>
52
<ul><li><p><a>Официальный The Java™ Tutorials от Oracle по примитивным типам данных.</a>Расскажет об особенностях применения.</p>
53
</li>
53
</li>
54
<li><p><a>Java Virtual Machine Specification --> 2.3. Primitive Types and Values</a></p>
54
<li><p><a>Java Virtual Machine Specification --> 2.3. Primitive Types and Values</a></p>
55
</li>
55
</li>
56
<li><p><a>Документация java8 касательно ссылочных типов.</a></p>
56
<li><p><a>Документация java8 касательно ссылочных типов.</a></p>
57
</li>
57
</li>
58
</ul>
58
</ul>