Установка ubuntu
snap install intellij-idea-community --classic --stable apt install default-jre (java --version) apt install default-jdk (javac --version)
Разнообразие терминов/комплектов вызывает сложности т.к. несколько проекций, по сути сводится вот к чему:
При компиляции создается объект «*.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
Если результат вычисления приводит к переполнению, то мат функция вернет заведомо ложный результат, есть спец функции для обработки такого д-я (переполнение типов переменных имеется ввиду)
Приведение происходит с указанием типа в скобках перед переменной, некоторые преобразования могут происходить с потерями (пунктирные линии):
Символьные строки являются неизменяемыми, всегда константы получается
Символьные строки сравниваются только методом 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: ") ;
Начальный каталог определяется виртуальной машиной, если запускать из 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) {…}»
В операции «[]» автоматически проверяются границы массива