Как использовать bigdecimal в java
Содержание:
- Загрузка статического и динамического класса
- JVM, JRE и JDK
- История
- Стиль оформления кода
- Полезные аппаратные функции, которых пока нет
- Платформы
- 4 Инкремент и декремент
- Поразрядные операции
- Логические операции в Java
- Тригонометрические функции
- Clone
- Запрещенные темы для публикаций
- Переменные
- Операция присваивания
- Термины: «унарный», «бинарный», «операнд»
- Практическое применение побитовых операций
- Библиотеки классов
Загрузка статического и динамического класса
- Добавление класса для запуска в JVM называется загрузкой класса.
- Классы загружаются статично с помощью нового оператора.
- Первый класс загружается через метод static main(). Затем подгружаются остальные классы.
- В серверных проектах отсутствует main(), поскольку сервер сам отвечает за всю инфраструктуру. Первый класс для загрузки отмечается в config файле. Довольно часто фреймворк реализует метод main() и предоставляет API. Пример: Контейнерный класс вызывает метод init() в сервлетах.
- main нужен для запуска Java-программы из командной строки в JVM.
- Если при загрузке статического класса не находится ссылка на класс, то выбрасывается NoClassDefinationFoundException.
- Динамические классы загружаются через программный вызов при выполнении. Пример: Class.forName(String ClassName);
- ClassNotFoundException выбрасывается при загрузке динамического класса.
JVM, JRE и JDK
Вот так и происходит вся магия: логика (т.е. код) прописывается в java файле, который затем преобразуется в файл класса. Машина его читает и выполняет.
Поток JVM, JRE и JDK
А теперь подробнее:
- JVM — виртуальная машина Java, выполняющая байт-код Java.
- JVM можно загружать на разном железе. Байт-коды — это машинный язык JVM. Поэтому Java является самым портируемым языком. JVM — это некий объект, который и обеспечивает портируемость. Для разных операционных систем (Mac, Windows, Linux и т.д.) придуманы свои реализации JVM.
- JRE — среда выполнения Java, достаточная для запуска программы.
- JRE = JVM + файлы библиотеки/пакеты классов (Util, Lang, Math etc).
- JDK — пакет средств разработки на Java. Нужен для написания, компиляции и выполнения программы.
- JDK = JRE + инструменты, необходимые для разработки Java-программы.
История
Герцог, талисман Явы
Джеймс Гослинг , создатель Java, в 2008 году
TIOBE язык программирования Индекс популярности графа с 2002 по 2018. Java устойчиво на вершине с середины 2015 года.
Джеймс Гослинг , Майк Шеридан и Патрик Нотон инициировали проект языка Java в июне 1991 года. Изначально Java была разработана для интерактивного телевидения, но в то время она была слишком продвинутой для индустрии цифрового кабельного телевидения. Первоначально этот язык назывался « Дуб» по имени дуба, который рос перед офисом Гослинга. Позже проект получил название Green и был окончательно переименован в Java , от кофе Java , кофе из Индонезии . Гослинг разработал Java с синтаксисом в стиле C / C ++, который был бы знаком системным и прикладным программистам.
Sun Microsystems выпустила первую общедоступную реализацию под названием Java 1.0 в 1996 году. Она обещала функциональность Write Once, Run Anywhere ( WORA ), обеспечивая бесплатное время выполнения на популярных платформах . Достаточно безопасный и обладающий настраиваемой безопасностью, он допускал ограничения доступа к сети и файлам. Вскоре в основные веб-браузеры появилась возможность запускать Java-апплеты на веб-страницах, и Java быстро стала популярной. Java 1.0 компилятор был переписан на Java с помощью Артур ван Хофф строго соблюдать спецификации Java 1.0 языка. С появлением Java 2 (первоначально выпущенного как J2SE 1.2 в декабре 1998–1999 гг.) В новых версиях было создано несколько конфигураций для различных типов платформ. J2EE включает технологии и API-интерфейсы для корпоративных приложений, обычно работающих в серверных средах, а J2ME включает API-интерфейсы, оптимизированные для мобильных приложений. Настольная версия была переименована в J2SE. В 2006 году в маркетинговых целях Sun переименовала новые версии J2 в Java EE , Java ME и Java SE соответственно.
В 1997 году Sun Microsystems обратилась в орган стандартизации ISO / IEC JTC 1, а позже и в Ecma International, чтобы формализовать Java, но вскоре отказалась от этого процесса. Java остается стандартом де-факто , управляемым через Java Community Process . В свое время Sun сделала большинство своих реализаций Java доступными бесплатно, несмотря на статус их проприетарного программного обеспечения . Sun получила доход от Java за счет продажи лицензий на специализированные продукты, такие как Java Enterprise System.
13 ноября 2006 г. Sun выпустила большую часть своей виртуальной машины Java (JVM) как бесплатное программное обеспечение с открытым исходным кодом (FOSS) в соответствии с условиями Стандартной общественной лицензии GNU (GPL). 8 мая 2007 года Sun завершила процесс, сделав весь основной код своей JVM доступным на условиях бесплатного программного обеспечения / распространения с открытым исходным кодом, за исключением небольшой части кода, авторские права на которую не принадлежали Sun.
Вице-президент Sun Рич Грин сказал, что идеальная роль Sun в отношении Java — это проповедь . После приобретения корпорацией Oracle корпорации Sun Microsystems в 2009–10 годах Oracle заявила о себе как о проводнике технологии Java с неослабевающей приверженностью созданию сообщества участия и прозрачности. Это не помешало Oracle вскоре после этого подать иск против Google за использование Java внутри Android SDK (см. Раздел ).
2 апреля 2010 г. Джеймс Гослинг ушел из Oracle .
В январе 2016 года Oracle объявила, что среды выполнения Java на основе JDK 9 прекращают поддержку подключаемого модуля браузера.
Программное обеспечение Java работает на всем: от ноутбуков до центров обработки данных , от игровых консолей до научных суперкомпьютеров .
Версии
По состоянию на сентябрь 2020 года Java 8 и 11 поддерживаются как версии с долгосрочной поддержкой (LTS), а также поддерживается одна более поздняя версия, отличная от LTS. Основные версии Java, а также даты их выпуска:
Версия | Дата |
---|---|
JDK Beta | 1995 г. |
JDK1.0 | 23 января 1996 г. |
JDK 1.1 | 19 февраля 1997 г. |
J2SE 1.2 | 8 декабря 1998 г. |
J2SE 1.3 | 8 мая 2000 г. |
J2SE 1.4 | 6 февраля 2002 г. |
J2SE 5.0 | 30 сентября 2004 г. |
Java SE 6 | 11 декабря 2006 г. |
Java SE 7 | 28 июля 2011 г. |
Java SE 8 | 18 марта 2014 г. |
Java SE 9 | 21 сентября 2017 г. |
Java SE 10 | 20 марта 2018 г. |
Java SE 11 | 25 сентября 2018 г. |
Java SE 12 | 19 марта 2019 г., |
Java SE 13 | 17 сентября 2019 г., |
Java SE 14 | 17 марта 2020 г. |
Java SE 15 | 15 сентября 2020 г. |
Стиль оформления кода
Существует негласные правила оформления стиля при написании кода. Старайтесь их придерживаться. Также запоминайте оформление кода в документации и справочниках. Например, принято записывать имена классов с большой буквы (class JavaQuickCourseActivity). Если имя состоит из нескольких слов, то каждое слово в имени также начинается с большой буквы. Использовать символы подчеркивания или тире нежелательно (Java_Quick_Course_Activity или Java-Quick-Course-Activity).
Для методов и переменных используется такой же формат, только первый символ записывается с маленькой буквы, например, resultButton.
Константы принято писать только большими буквами — IDD_LIST_NAMES. В этом случае одного взгляда достаточно, чтобы сразу определить, что перед вами константа.
На первых порах вам этого достаточно.
Полезные аппаратные функции, которых пока нет
Отсутствие приложений – одна из основных проблем Chrome OS. Вторая проблема – отставание устройств под ее управлением от Windows- и Mac-аналогов в плане технического оснащения. К примеру, биометрическая защита есть пока только в планшете Pixel Slate, вышедшем в октябре 2020 г., и то лишь в виде классического сканера отпечатков пальцев.
Ноутбук Google PixelBook, который умеет лишь трансформироваться в планшет
В хромбуках нет поддержки сотовых сетей четвертого поколения (LTE), нет дисплеев с HDR, и даже хотя бы базовой синхронизации со смартфонами (к примеру, Chrome OS не поддерживает «перехват» звонков со смартфонов». Отсутствуют и другие нужные многим функции – возможность установки дополнительной операционной системы или базовых редакторов аудио и видео. В итоге, перечень того, что умеют хромбуки и хромбоксы (неттопы на базе Chrome OS), окажется значительно короче в сравнении со списком отсутствующих в них возможностей.
В то же время, все те функции, что Google реализовала в Chrome OS, а производители устройств – в своей продукции, не уникальны. Этот минимальный набор есть практически во всех компьютерах и ноутбуках на базе Windows и Mac OS.
Платформы
Платформа может относиться к типу процессора (ЦП) или другому оборудованию, на котором работает данная операционная система или приложение , типу операционной системы на компьютере или комбинации типа оборудования и типа операционной системы, работающей на нем. Пример распространенной платформы — Microsoft Windows, работающая на архитектуре x86 . Другие хорошо известные платформы настольных компьютеров включают Linux / Unix и macOS, обе из которых сами по себе являются кроссплатформенными. Однако существует множество устройств, таких как смартфоны , которые также фактически являются компьютерными платформами, но о них меньше думают. Прикладное программное обеспечение может быть написано в зависимости от функций конкретной платформы — оборудования, операционной системы или виртуальной машины, на которой оно работает. Платформа Java — это платформа виртуальных машин, которая работает во многих операционных системах и типах оборудования, и является общей платформой для написания программного обеспечения.
Аппаратные платформы
Аппаратная платформа может относиться к архитектуре набора команд . Например: архитектура x86 и ее варианты, такие как IA-32 и x86-64 . На этих машинах часто работает одна версия Microsoft Windows, хотя они могут работать и с другими операционными системами, включая Linux, OpenBSD , NetBSD , macOS и FreeBSD .
Эти 32-разрядные архитектуры ARM (и более новые 64-разрядные версии) является общим на смартфоны и планшетные компьютеры , которые работают Android , IOS , и других мобильных операционных систем .
Программные платформы
Программные платформы могут быть либо операционной системой, либо средой программирования , хотя чаще это комбинация того и другого. Заметным исключением из этого правила является Java , которая использует независимую от операционной системы виртуальную машину для своего скомпилированного кода, известного в мире Java как байт-код . Примеры программных платформ:
- BlackBerry
- Android для смартфонов и планшетных компьютеров (x86, ARM)
- iOS ( ARM )
-
Microsoft Windows (x86, ARM
Интерфейс командной строки , также известный под именами реализации .NET Framework (от Microsoft) и кроссплатформенным вариантом Mono (ранее Novell, а теперь Xamarin )
)
- Ява
- Веб-браузеры — более или менее совместимы друг с другом, работают с веб-приложениями на JavaScript.
- Linux (x86, PowerPC, ARM и другие архитектуры)
- macOS (x86, PowerPC (на 10.5 и ниже))
- Mendix
- Solaris (SPARC, x86)
- SymbianOS
- SPARC
- PlayStation 4 (x86), PlayStation 3 (на базе PowerPC) и PlayStation Vita (ARM)
- Unix
- Незначительный / исторический
- AmigaOS (m68k), AmigaOS 4 (PowerPC), AROS (x86, PowerPC, m68k), MorphOS (PowerPC)
- Atari TOS , MiNT
- BSD (многие платформы; см., Например, NetBSDnet)
-
Системы типа DOS на x86: MS-DOS , IBM PC DOS , DR-DOS , FreeDOS
- OS / 2 , eComStation
Платформа Java
Как отмечалось ранее, платформа Java является исключением из общего правила, согласно которому операционная система является программной платформой. Язык Java обычно компилируется в виртуальную машину: виртуальный ЦП, на котором выполняется весь код, написанный для языка. Это позволяет запускать один и тот же исполняемый двоичный файл во всех системах, реализующих виртуальную машину Java (JVM). Программы Java могут выполняться изначально с использованием процессора Java . Это нечасто и в основном используется для встроенных систем.
Код Java, работающий в JVM, имеет доступ к службам, связанным с ОС, таким как дисковый ввод-вывод и доступ к сети, если предоставлены соответствующие привилегии. JVM делает системные вызовы от имени приложения Java. Эта настройка позволяет пользователям выбирать соответствующий уровень защиты в зависимости от ACL . Например, дисковый и сетевой доступ обычно разрешен для настольных приложений, но не для апплетов на основе браузера . JNI также можно использовать для обеспечения доступа к специфическим функциям операционной системы.
В настоящее время программы Java Standard Edition могут работать в Microsoft Windows, macOS, нескольких Unix-подобных операционных системах и еще нескольких не-UNIX-подобных операционных системах, таких как встроенные системы. Для мобильных приложений используются плагины браузера для устройств на базе Windows и Mac, а Android имеет встроенную поддержку Java. Также существуют подмножества Java, такие как Java Card или Java Platform, Micro Edition , предназначенные для устройств с ограниченными ресурсами.
4 Инкремент и декремент
В программировании очень часто приходится увеличивать или уменьшать переменную на единицу. Для этих действий в Java есть специальные команды:
Оператор инкремент (увеличение на единицу) выглядит так:
Увеличение на единицу
Эта команда делает то же самое, что и команда – увеличивает переменную на единицу.
Оператор декремент (уменьшение на единицу) выглядит так:
Уменьшение на единицу
Эта команда делает то же самое, что и команда – уменьшает переменную на единицу.
Примеры
Команда | Примечание |
---|---|
В переменной будет значение В переменной будет значение В переменной будет значение В переменной будет значение В переменной будет значение В переменной будет значение |
|
В переменной будет значение В переменной будет значение В переменной будет значение В переменной будет значение В переменной будет значение В переменной будет значение В переменной будет значение |
Поразрядные операции
Последнее обновление: 30.10.2018
Поразрядные операции выполняются над отдельными разрядами или битами чисел. В данных операциях в качестве операндов могут выступать только целые числа.
Каждое число имеет определенное двоичное представление. Например, число 4 в двоичной системе 100, а число 5 — 101 и так далее.
К примеру, возьмем следующие переменные:
byte b = 7; // 0000 0111 short s = 7; // 0000 0000 0000 0111
Тип byte занимает 1 байт или 8 бит, соответственно представлен 8 разрядами. Поэтому значение переменной b в двоичном коде будет
равно . Тип short занимает в памяти 2 байта или 16 бит, поэтому число данного типа будет представлено
16 разрядами. И в данном случае переменная s в двоичной системе будет иметь значение .
Для записи чисел со знаком в Java применяется дополнительный код (two’s complement), при котором
старший разряд является знаковым. Если его значение равно 0, то число положительное, и его двоичное представление не отличается
от представления беззнакового числа. Например, 0000 0001 в десятичной системе 1.
Если старший разряд равен 1, то мы имеем дело с отрицательным числом. Например, 1111 1111 в десятичной системе представляет -1.
Соответственно, 1111 0011 представляет -13.
Логические операции
Логические операции над числами представляют поразрядные операции. В данном случае числа рассматриваются в двоичном представлении, например, 2 в двоичной системе
равно 10 и имеет два разряда, число 7 — 111 и имеет три разряда.
-
Умножение производится поразрядно, и если у обоих операндов значения разрядов равно 1,
то операция возвращает 1, иначе возвращается число 0. Например:int a1 = 2; //010 int b1 = 5;//101 System.out.println(a1&b1); // результат 0 int a2 = 4; //100 int b2 = 5; //101 System.out.println(a2 & b2); // результат 4
В первом случае у нас два числа 2 и 5. 2 в двоичном виде представляет число 010, а 5 — 101. Поразрядное умножение чисел (0*1, 1*0, 0*1) дает результат 000.
Во втором случае у нас вместо двойки число 4, у которого в первом разряде 1, так же как и у числа 5, поэтому здесь результатом операции
(1*1, 0*0, 0 *1) = 100 будет число 4 в десятичном формате. -
(логическое сложение)
Данная операция также производится по двоичным разрядам, но теперь возвращается единица,
если хотя бы у одного числа в данном разряде имеется единица (операция «логическое ИЛИ»). Например:int a1 = 2; //010 int b1 = 5;//101 System.out.println(a1|b1); // результат 7 - 111 int a2 = 4; //100 int b2 = 5;//101 System.out.println(a2 | b2); // результат 5 - 101
-
(логическое исключающее ИЛИ)
Также эту операцию называют XOR, нередко ее применяют для простого шифрования:
int number = 45; // 1001 Значение, которое надо зашифровать - в двоичной форме 101101 int key = 102; //Ключ шифрования - в двоичной системе 1100110 int encrypt = number ^ key; //Результатом будет число 1001011 или 75 System.out.println("Зашифрованное число: " +encrypt); int decrypt = encrypt ^ key; // Результатом будет исходное число 45 System.out.println("Расшифрованное число: " + decrypt);
Здесь также производятся поразрядные операции. Если у нас значения текущего разряда у обоих чисел разные, то возвращается 1, иначе возвращается 0.
Например, результатом выражения 9^5 будет число 12. А чтобы расшифровать число, мы применяем обратную операцию к результату. -
(логическое отрицание)
Поразрядная операция, которая инвертирует все разряды числа: если значение разряда равно 1,
то оно становится равным нулю, и наоборот.byte a = 12; // 0000 1100 System.out.println(~a); // 1111 0011 или -13
Операции сдвига
Операции сдвига также производятся над разрядами чисел. Сдвиг может происходить вправо и влево.
-
— сдвигает число a влево на b разрядов. Например, выражение сдвигает число 4 (которое в двоичном
представлении 100) на один разряд влево, в результате получается число 1000 или число 8 в десятичном представлении. -
— смещает число a вправо на b разрядов. Например, сдвигает число 16
(которое в двоичной системе 10000) на один разряд вправо, то есть в итоге получается 1000 или число 8 в десятичном представлении. -
— в отличие от предыдущих типов сдвигов данная операция представляет беззнаковый сдвиг — сдвигает число a вправо на b разрядов.
Например, выражение будет равно 1073741822.
Таким образом, если исходное число, которое надо сдвинуть в ту или другую сторону, делится на два, то фактически получается умножение или деление на два.
Поэтому подобную операцию можно использовать вместо непосредственного умножения или деления на два, так как операция сдвига на аппаратном уровне менее дорогостоящая операция
в отличие от операции деления или умножения.
НазадВперед
Логические операции в Java
Логический операндtruefalse
- — логический операнд, его значение равно false
- — логический операнд, значение которого, очевидно, true
- — тоже может быть логическим операндом, как и Boolean a
- — не является логическим операндом, это просто переменная типа
- также не является логическим операндом. Это строка, текстовое значение которой — .
- Логическое отрицание, оно же или инверсия. В Java обозначается символом “” перед операндом. Применяется к одному операнду.
- Логическое и, оно же или конъюнкция. Обозначается символом “” между двумя операндами, к которым применяется.
- Логическое или в Java, оно же — , оно же — дизъюнкция. В Java обозначается символом “” между двумя операндами.
- Исключающее или, , строгая дизъюнкция. В Java обозначается символом “” между двумя операндами.
- В Java к логическим операторам можно отнести условное или, обозначаемое как , а также условное и — .
Примечание:Внимание!
Оператор Java | Имя | Тип | Краткое описание | Пример |
---|---|---|---|---|
Логическое “не” (отрицание) | Унарный | означает “не x”. Возвращает true если операнд является false. Возвращает false если операнд является true. |
Тогда |
|
Логическое И (, умножение) | Бинарный | Возвращает true если оба операнда равны true. |
тогда |
|
Логическое ИЛИ (, сложение) | Бинарный | Возвращает true если хотя бы один из операндов равен true. |
тогда |
|
Логическое исключающее ИЛИ () | Бинарный | Возвращает true, если один и только один из операндов равен true. Возвращает false, если оба операнда равны true или false. По сути, возвращает true, если операнды — разные. |
тогда |
|
Условное И (сокращённое логическое И) | Бинарный | То же самое, что и , но если операнд, находящийся слева от является false, данный оператор возвращает false без проверки второго операнда. | ||
Условное ИЛИ (сокращённое логическое ИЛИ) | Бинарный | То же самое, что и , но если оператор слева является true, оператор возвращает true без проверки второго операнда. |
Логические операции в курсе JavaRush Без логических операций никуда не деться, и в курсе JavaRush они появляются с первых уровней, вместе с условиями и типом данных boolean. Пользоваться методами математической логики программисты приучаются постепенно. Для более уверенных манипуляций с логическими конструкциями требуется определённая сноровка и понимание некоторых процессов. Так что подробнее и уже на совсем другом уровне к этим операциям подходят в конце квеста Multithreading, когда большинство студентов уже не слишком отвлекается непосредственно на синтаксис и конструкции, а старается вникать в суть задачи. |
Тригонометрические функции
Класс Java Math содержит набор тригонометрических функций. Эти функции могут вычислять значения, используемые в тригонометрии, такие как синус, косинус, тангенс и т. д.
Mathkpi
Константа Math.PI представляет собой двойное значение, значение которого очень близко к значению PI — математическому определению PI.
Math.sin()
Метод Math.sin() вычисляет значение синуса некоторого значения угла в радианах:
double sin = Math.sin(Math.PI); System.out.println("sin = " + sin);
Math.cos()
Метод Math.cos() вычисляет значение косинуса некоторого значения угла в радианах:
double cos = Math.cos(Math.PI); System.out.println("cos = " + cos);
Math.tan()
Метод Math.tan() вычисляет значение тангенса некоторого значения угла в радианах:
double tan = Math.tan(Math.PI); System.out.println("tan = " + tan);
Math.asin()
Метод Math.asin() вычисляет значение синусоиды значения от 1 до -1:
double asin = Math.asin(1.0); System.out.println("asin = " + asin);
Math.acos()
Метод Math.acos() вычисляет значение арккосинуса от 1 до -1:
double acos = Math.acos(1.0); System.out.println("acos = " + acos);
Math.atan()
Метод Math.atan() вычисляет значение арктангенса для значения от 1 до -1:
double atan = Math.atan(1.0); System.out.println("atan = " + atan);
Вот что говорит JavaDoc:
Если вам нужен этот метод, пожалуйста, прочитайте JavaDoc.
Math.sinh()
Метод Math.sinh() вычисляет значение гиперболического синуса значения между 1 и -1:
double sinh = Math.sinh(1.0); System.out.println("sinh = " + sinh);
Math.cosh()
Метод Math.cosh() вычисляет значение гиперболического косинуса от 1 до -1:
double cosh = Math.cosh(1.0); System.out.println("cosh = " + cosh);
Math.tanh()
Метод Math.tanh() вычисляет значение гиперболического тангенса значения от 1 до -1:
double tanh = Math.tanh(1.0); System.out.println("tanh = " + tanh);
Math.toDegrees()
Метод Math.toDegrees() преобразует угол в радианах в градусы:
double degrees = Math.toDegrees(Math.PI); System.out.println("degrees = " + degrees);
Math.toRadians()
Метод Math.toRadians() преобразует угол в градусах в радианы:
double radians = Math.toRadians(180); System.out.println("radians = " + radians);
Clone
- Метод сlone нужен для копирования объекта.
- В методе clone присутствует защищенный модификатор доступа.
- Для вызова метода clone объекту требуется реализация интерфейса Cloneable. В противном случае выбрасывается исключение CloneNotSupportedException.
- Интерфейс Cloneable является маркерным, то есть методы не определяют интерфейс, а говорят классу об особом отношении.
- Плюс такого интерфейса: можно копировать только объекты, доступные для клонирования.
- Если какое-то поле объекта ссылается на другой объект, то делаем поверхностную копию. В ней копируется только адрес памяти, т.е. используется один и тот же объект.
- При глубоком копировании происходит создание объекта и новое динамическое распределение памяти.
Не обращайте внимание на оператора try — к нему мы вернемся позже
Запрещенные темы для публикаций
Переменные
Переменные используются для хранения данных. Переменные сначала должны быть объявлены, и только после этого ими можно пользоваться.
int x; // объявлена переменная под именем x int y; // объявлена переменная под именем y
Как следует из названия, переменные могут меняться (точнее их значения). Проведём аналогию с кошачьим приютом. Котов привозят в приют, потом добрые люди забирают котов из него. Получается, что коты постоянно меняются, а приют остаётся.
Переменные могут быть двух видов
- примитивные типы: int, float, double, char и другие, которые представляют собой числа, символы
- объекты, которые представляют классы
Список переменных примитивных типов рассматривается в следующей статье.
Переменной можно присвоить начальное значение (инициализировать) через знак равенства и указанием значения. Указываемое значение должно подходить типу, который вы указали для переменной. Для объявления нескольких переменных одного типа можно использовать запятые:
Также возможна динамическая инициализация. Вам нужно только проследить, чтобы вычисляемое выражение соответствовало переменной.
В некоторых случаях нужно, чтобы переменная не менялась, в этом случае переменная называется константой и имеет ключевое слово final.
Переменные имеют свою область видимости. Она может быть доступна только внутри метода, цикла, класса. Подобная защита уменьшает риск ошибок от несанкционированного доступа или изменений от чужого кода. Также следует помнить, что внутри блока переменные можно объявить в любом месте, но они становятся допустимыми только после объявления. Если ситуация будет обратной, то конструкция будет бессмысленной и вам не разрешат так делать:
Переменные создаются при входе в их область видимости и уничтожаются при выходе из неё. Иными словами, переменная утратит своё значение сразу после выхода из области видимости. Поэтому, переменные, которые объявлены внутри метода, не будут хранить свои значения между обращениями к этому методу.
Если объявление переменной содержит инициализацию, то инициализация будет повторяться при каждом вхождении в блок, в котором она объявлена. Допустим, у нас есть блок:
При каждом вхождении в цикл переменной присваивается снова и снова значение 42. И хотя потом переменной присваивается значение 54, оно теряется при повторном вхождении в блок.
Блоки бывают вложенными, но тем не менее во внутреннем блоке нельзя объявлять переменные с тем же именем, что и во внешней области:
Операция присваивания
Операция «=» позволяет присвоить значение переменной:
Java
int x = 3;
long l1 = 10_000_000_000L;
float f1 = 1.3f;
double weight = 81.34;
byte b1 = 100;
short sh1 = -10000;
char ch1 = 60000;
1 |
intx=3; longl1=10_000_000_000L; floatf1=1.3f; doubleweight=81.34; byteb1=100; shortsh1=-10000; charch1=60000; |
КОНСТАНТНЫЕ значения до
int можно присвоить без приведения типа к переменным меньшего размера (например
short в
byte), если значение помещается в эту переменную.
Вы можете присвоить переменной, имеющей больший тип, значение меньшего типа, например переменной типа
double можно присвоить значение
int, но не наоборот (но можно использовать приведение типа, если очень нужно).
Примеры:
Java
double d1 = 2; // Это можно
int x = 2.3; // так нельзя. Будет ошибка компиляции.
byte b1 = 100; //Это можно, так как литерал 100 гарантировано
// поместится в byte.
byte b2 = 10000; //Нельзя. Ошибка компиляции.
int n = 100;
byte b3 = n; //А вот так тоже нельзя, так как
// переменная n имеет тип int.
1 |
doubled1=2;// Это можно intx=2.3;// так нельзя. Будет ошибка компиляции. byteb1=100;//Это можно, так как литерал 100 гарантировано // поместится в byte. byteb2=10000;//Нельзя. Ошибка компиляции. intn=100; byteb3=n;//А вот так тоже нельзя, так как // переменная n имеет тип int. |
Операция присваивания возвращает значение, которое присвоила, поэтому можно присваивать значение сразу нескольким переменным по цепочке:
Java
int x;
int y;
int z = x = y = 10; // y, x и z будет присвоено 10.
1 |
intx; inty; intz=x=y=10;// y, x и z будет присвоено 10. |
Термины: «унарный», «бинарный», «операнд»
Прежде, чем мы двинемся дальше, давайте разберёмся с терминологией.
-
Операнд – то, к чему применяется оператор. Например, в умножении есть два операнда: левый операнд равен , а правый операнд равен . Иногда их называют «аргументами» вместо «операндов».
-
Унарным называется оператор, который применяется к одному операнду. Например, оператор унарный минус меняет знак числа на противоположный:
-
Бинарным называется оператор, который применяется к двум операндам. Тот же минус существует и в бинарной форме:
Формально, в последних примерах мы говорим о двух разных операторах, использующих один символ: оператор отрицания (унарный оператор, который обращает знак) и оператор вычитания (бинарный оператор, который вычитает одно число из другого).
Практическое применение побитовых операций
Побитовые операции имеют довольно широкое практическое применение, рассмотрим некоторые случаи:
4.3. Шифрование числа
Операция XOR при применении два раза к одному и тому же битовому массиву восстанавливает ее исходное значение. Это можно использовать при шифровании данных при передаче по сети:
C = A ^ B
A = C ^ B
Представьте, что необходимо отправить в сообщении число 560 — пин-код от банковской карты. Если злоумышленник перехватит сообщение, то узнает пин-код и сможет воспользоваться им. Только отправитель и получатель могут знать пин-код. Чтобы этого не произошло, придумаем какое-то число — маску и сообщим его получателю заранее. Перед отправкой пин-кода, зашифруем его — применим побитовую операцию XOR: . И результат отправим. Если злоумышленник и перехватит сообщение, он не будет знать как его расшифровать. Адресат получает сообщение, расшифровывает пин-код с помощью имеющейся маски: .
Следующий код иллюстрирует этот пример:
4.4. Наложение маски
Маска позволяет получать значения только определенных битов в последовательности. Например, у нас есть маска 00100100. Она позволяет нам получать из последовательности только те биты, которые в ней установлены. В данном случае это 3-й и 7-й разряд. Для этого достаточно выполнить побитовое AND с нашей маской и выбранным числом:
Библиотеки классов
Библиотеки классов Java является стандартной библиотекой , разработанной для поддержки разработки приложений на Java. Он контролируется Oracle в сотрудничестве с другими через программу Java Community Process . Компании или отдельные лица, участвующие в этом процессе, могут влиять на проектирование и разработку API. Этот процесс был предметом споров в течение 2010-х годов. Библиотека классов содержит такие функции, как:
- Основные библиотеки, которые включают:
- Отражение
- Параллелизм
- Дженерики
- Скрипты / компилятор
- Функциональное программирование (Lambda, Streaming)
- Библиотеки коллекций, которые реализуют структуры данных, такие как списки , словари , деревья , наборы , очереди и двусторонние очереди или стеки
- Библиотеки обработки XML (синтаксический анализ, преобразование, проверка)
- Безопасность
- Библиотеки интернационализации и локализации
- Библиотеки интеграции, которые позволяют автору приложения взаимодействовать с внешними системами. Эти библиотеки включают:
- Java Database Connectivity (JDBC) API для доступа к базам данных
- Интерфейс именования и каталогов Java (JNDI) для поиска и обнаружения
- RMI и CORBA для разработки распределенных приложений
- JMX для управления и мониторинга приложений
-
Библиотеки пользовательского интерфейса , которые включают:
- (Тяжелый или собственный ) Abstract Window Toolkit (AWT), который предоставляет компоненты графического интерфейса , средства для размещения этих компонентов и средства для обработки событий из этих компонентов.
- (Легкие) библиотеки Swing , которые построены на AWT, но предоставляют (неродные) реализации виджетов AWT
- API для захвата, обработки и воспроизведения звука
- JavaFX
- Зависящая от платформы реализация виртуальной машины Java, которая является средством, с помощью которого выполняются байт-коды библиотек Java и сторонних приложений.
- Плагины, которые позволяют запускать апплеты в веб-браузерах.
- Java Web Start , который позволяет эффективно распространять Java-приложения среди конечных пользователей через Интернет.
- Лицензирование и документация