====== Общие сведения ====== ===== Intellij Idea ===== Установка ubuntu\\ snap install intellij-idea-community --classic --stable apt install default-jre (java --version) apt install default-jdk (javac --version) ===== Сведения ===== [[https://www.oracle.com/java/technologies/downloads|Downloads]]\\ {{:develop:java:2023-01-05_17-03.png?direct&600|}}\\ [[https://habr.com/ru/articles/488144/|Про версии]]\\ Разнообразие терминов/комплектов вызывает сложности т.к. несколько проекций, по сути сводится вот к чему:\\ * JDK - Java [SE] Development Kit, комплект инструментальных средств **для разработки** (SDK старое название) * JRE - Java Runtime Environment, только виртуальная машина, без компиляторов, **для пользователей** * Java SE - Standart Edition * Java EE - Enterprise Edition * Java ME - Mirco Edition * **Java 6** она же **Java SE 6** она же **Java SE 1.6.0**, тоже справедливо и для 7,8,9, по факту одно и тоже ==== Использование ==== При компиляции создается объект "*.class" содержащий байт код. При выполнении нужно указывать имя класса, а не имя файла\\ Имя файла должно совпадать с именем открытого класса\\ Все элементы программ на Java находятся в составе классов\\
:!: Минимальный пример /*Класс Main должен хранится в файле Main.java (наверно как и любой другой класс)*/ public class Main { public static void main(String[] args) { System.out.println("Hello world!"); } } javac Main.java ls -> Main.java, Main.class java Main - выполнение
Числа с плавающей точкой нельзя использовать в расчетах где ошибки округления недопустимы, есть спец класс "BigDecimal"\\ :!: Строки принимают шестнадцатеричные юникод последовательности типа "\u0000 - \uFFFF". Причем даже в комментарии может распознать и применить, например такой коммент приведет к ошибке "c:\users" т.к. есть "\u" О_О\\ === Типы === :!: Тип boolean не конвертируется в числовое значение !\\ При объявлении переменных нужно **указывать их тип**, с недавних версий, локальным можно не указывать, если его можно вывести из первоначального значения, для этого указать ключевое слово **"var"**\\ Ключевое слово **"final"** используется для определения **констант**. Приветствуется именование заглавными буквами\\ Константа на весь класс задается словами **static final**, за пределами методов, модификатор **public** откроет ее для других классов\\ :!: Перечислимые типы, **enum**\\ enum Size {SMALL, MEDIUM, LARGE, EXTRA}; Size s = Size.MEDIUM // можно присвоить null :!: Если результат вычисления приводит к переполнению, то мат функция вернет заведомо ложный результат, есть спец функции для обработки такого д-я (переполнение типов переменных имеется ввиду)\\ Приведение происходит с указанием типа в скобках перед переменной, некоторые преобразования могут происходить с потерями (пунктирные линии):\\ {{:develop:java:2023-01-06_13-04.png?direct&600|}} :!: Символьные строки являются неизменяемыми, всегда константы получается\\ Символьные строки сравниваются только методом **mystring.equals()**, оператор "==" только проверит хранятся ли они в одном участке памяти, так же есть метод **compareTo()**\\ **null** и **length 0** разные вещи\\ === Ввод/Вывод === :!:Консольный ввод. Нужен объект "Scanner"\\ import java.util.*; Scanner in = new Scanner(System.in); String allLine = in.nextLine(); String oneWord = in.next(); int oneDigit = in.nextInt(); /nextDouble(); // Еще есть тайный ввод Console cons = System.console(); String username = cons.readLine ("User name: "); char[] passwd = cons.readPasswi:Jrd ("Password: ") ; {{:develop:java:2023-01-06_21-04.png?direct&600|}} {{:develop:java:2023-01-06_21-12.png?direct&600|}} :!: Начальный каталог определяется виртуальной машиной, если запускать из IDE то путь хз какой будет\\ :!: При запуске программы можно задать ей файлы для стандартных потоков ввода/вывода, например **"java MyProg < inFile.txt > outFile.txt"**\\ === Управляющие конструкции === :!: **Дробные числа** нужно быть очень внимательным с ними и пользоваться всякими спец методами для работы с ними, например: // Этот цикл никогда не завершится for (double x = 0; x != 10; x += 0.1) // x перескочит с 9.99..998 на 10.999..9998. т.к. у 0.1 не существует точного двоичного представления === Массивы === Инициализируются отдельно, оператором **new**, int и boolean заполняются нулями и false с-но, объекты, в т.ч. **String**, заполняются значением **null**\\ :!: **for each** (условно). Перебираем элементы коллекции или класса если определен интерфейс "Iterable"\\ "for (int item: ArrayItems) {...}" В операции "[]" автоматически проверяются границы массива\\
:!: