HTML Diff
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) --&gt; 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) --&gt; 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) --&gt; 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) --&gt; 0, 1, 2, 3, 4,<strong>10</strong>, 11, 12, 13, 14,<strong>20</strong>, 21, 22, 23, 24...</li>
41 <li>двоичная (0, 1) --&gt; 0, 1,<strong>10</strong>, 11,<strong>100</strong>, 101, 110, 111...</li>
41 <li>двоичная (0, 1) --&gt; 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) --&gt; допустим 4 bit в двоичной (<strong>?_010</strong>) --&gt; max = 7, min = -7. Первый бит уходит под знак, а остальные уже для кодировки числа.</li>
49 <ul><li>подписанные величины (signed) --&gt; допустим 4 bit в двоичной (<strong>?_010</strong>) --&gt; max = 7, min = -7. Первый бит уходит под знак, а остальные уже для кодировки числа.</li>
50 <li>не подписанные величины (unsigned) --&gt; допустим 4 bit в двоичной (<strong>1010</strong>) --&gt; max = 15, min = 0. Первый бит участвует в кодировке числа.</li>
50 <li>не подписанные величины (unsigned) --&gt; допустим 4 bit в двоичной (<strong>1010</strong>) --&gt; 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 --&gt; 2.3. Primitive Types and Values</a></p>
54 <li><p><a>Java Virtual Machine Specification --&gt; 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>