"Что вы знаете о функции main, какие обязательные условия ее определения?"
1. Всякое приложение должно содержать метод с именем main . Он может быть один на все приложение или содержаться в нескольких его классах. Метод main() записывается как обычный метод, может содержать любые описания и действия, но он обязательно должен быть открытым (public), статическим (static), не иметь возвращаемого значения (void). Его аргументом обязательно должен быть массив строк (String[]). По традиции этот массив называют args, хотя имя может быть любым. Туда передаются параметры из командной строки, с помощью которых можно предоставить приложению нужную информацию или настроить его для запуска нужным образом.
public static void main (String args []) {}
скрытый текст1.1 Эти особенности возникают из-за того, что метод main() вызывается автоматически исполняющей системой Java в самом начале выполнения приложения. При вызове интерпретатора java указывается класс, где записан метод main(), с которого надо начать выполнение. Поскольку классов с методом main() может быть несколько, можно построить приложение с дополнительными точками входа, начиная выполнение приложения в разных ситуациях из различных классов.
1.1.1 Когда вы запускается java.exe (или javaw.exe в Windows), на самом деле происходит несколько вызовов Java Native Interface (JNI). JNI - это инструмент, который мы используем, когда нам приходится соединяться между миром виртуальной машины (JVM) и миром C, С++ и т.д. java.exe - это простое приложение C, которое анализирует командную строку, создает новый массив String в JVM для хранения этих аргументов, анализирует имя класса, указанное при вызове как содержащее main(), использует вызовы JNI для поиска самого метода main(), затем вызывает метод main(), передавая вновь созданный строковый массив в качестве параметра.
1.2. Иногда метод main() заносят в каждый класс с целью отладки. В этом случае в метод main() включают тесты для проверки работы всех методов класса.
2. При вызове интерпретатора java можно передать в метод main() несколько параметров, которые интерпретатор заносит в массив строк. Эти параметры перечисляются в строке вызова java через пробел сразу после имени класса. Если параметр содержит пробелы, надо заключить его в кавычки. Кавычки не будут включены в параметр, это только ограничители.
2.1. Примеры вызова main из класса Echo и соответствующих им значений параметра args:
java Echo Hello XXI century: массив из трех элементов Hello, XXI, century
java Echo "Hello XXI century": массив из одного элемента Hello XXI century
java Echo Hello "XXI century": массив из двух элементов Hello, XXI century
"Какие унарные операции вы знаете?"
1. Унарные операции — это операции, которые выполняются над одним операндом (бинарные над двумя, тринарные — над тримя).
2. В Java имеются следующие семь унарных операций:
+ (унарный плюс)
- (унарный минус)
++ (префиксный либо постфиксный инкремент; только для целых)
-- (префиксный либо постфиксный декремент; только для целых)
~ (побитовое инвертирование; только для целых)
! (логическое отрицание; только для boolean)
( ) (приведение типа)
2.1. Унарные операторы + и - отличаются от бинарных операторов + и -, которые трактуются, как сложение и вычитание. Унарный + не имеет никакого эффекта, кроме подчёркивания положительной природы численного литерала. Унарный - меняет знак выражения с плюса на минус и наоборот.
скрытый текст2.2. Инкремент увеличивает значение переменной на 1; декремент уменьшает. По сути, являются сокращенным вариантом записи для сложения или вычитания из операнда единицы. В зависимости от того, используется операция в префиксной или постфиксной форме (стоит до или после переменной) меняется порядок выполнения операций: инкремент/декремент выполняются до или после прочих.
z=++y (вначале значение переменной y увеличивается на 1, а затем ее значение присваивается переменной z)
z=y++ (вначале значение переменной y присваивается переменной z, а потом значение переменной y увеличивается на 1)
2.3. Побитовое инвертирование. Каждый примитивный тип Java представляется в виртуальной машине так, что представление не зависит от платформы. Это означает, что битовый шаблон, используемый для представления отдельного числа, будет всегда тем же самым. Таким образом и манипулирование битами — процесс более эффективный, в силу независимости от платформы. Побитовое инвертирование означает, что в двоичном представлении числа 0 заменяется на 1, а 1 — на 0. Например, применение этого оператора к байту с содержимым 00001111 даст 11110000.
2.4. Оператор ! инвертирует логическое значение выражения. Например, !true = false. Этот оператор часто используется в тестовой части if () конструкции.
2.5. Приведение типа используется для явной конвертации выражения в заданный тип. Операция возможна только для допустимых типов. И во время компиляции, и во время выполнения программы, приведение типа проверяется на корректность.
2.5.1.Приведение типа применяется для изменения типа значений примитивного типа. Например, можем форсировать конвертацию double к int как, например, в следующем фрагменте:
int circum = (int)(Math.PI * diameter);
Здесь приведение типа выражается фрагментом (int). Если бы этот фрагмент отсутствовал, компилятор бы выдал ошибку, поскольку значение типа double, возвращаемое арифметическим выражением не может быть точно представлено значением типа int, к которому присваивается. Присвоение типа — это способ, которым программист говорит компилятору: "Я знаю, что такое присвоение может быть рискованным, но верь мне, ведь я — специалист". Конечно, если результат при этом теряет точность так, что программа не функционирует должным образом, - это ответственность программиста.
2.5.2. Присвоение типа может быть применено и к ссылочным типам. Это типично, например, для случаев, когда используются контейнеры типа Vector. Если вы помещаете объект типа String в Vector, то когда вы его извлекаете, тип, возвращаемый методом elementAt(), будет Object. Для использования извлечённого объекта как String нужно применить приведение типа, как, например, в следующем фрагменте кода:
Vector v = new Vector();
v.add ("Hello");
String s = (String)v.get(0);
1. Операция присваивания. Присвоение переменной значения константы, другой переменной или выражения (переменных и/или констант, разделенных знаками операций), называется операцией присваивания и обозначается знаком "=".
1.1 В Java допустимо многократное использование операции присваивания в одном выражении. Например, x1 = x2 = x3 = 0;
Эта операция выполняется справа налево, т.е. сначала переменной x3 присваивается значение 0, затем переменной x2 присваивается значение переменной x3 (0), и, наконец, переменной x1 присваивается значение переменной x2 (0).
скрытый текст2. Арифметические бинарные операции. Используются для вычислений так же как в алгебре. Допустимые операнды должны иметь числовые типы. Например, использовать эти операторы для работы с логическими типами нельзя, но можно для работы с типом char.
В Java определены следующие арифметические бинарные операции:
- сложение "+";
- вычитание "-";
- умножение "*";
- деление "/";
- вычисление остатка от деления целых чисел "%".
2.1. Вычисление остатка возвращает остаток от деления первого числа на второе, причем результат будет иметь тот же знак, что и делимое), например, 5%3 будет равно 2, а (-7)%(-4) будет равен -3. Может использоваться и для вещественных переменных (типа float или double.
2.2. Для каждого из арифметических операторов есть форма, в которой одновременно с заданной операцией выполняется присваивание. Это +=; -= , *= ; += ; %=.
3. Для того, чтобы можно было сравнивать два значения, в Java имеется набор операторов, описывающих отношение и равенство. Значения любых типов, включая целые и вещественные числа, символы, логические значения и ссылки, можно сравнивать, используя оператор проверки на равенство == и неравенство !=. Один знак (=) — это оператор присваивания.
3.1. Список операторов отношения:
- равно (==)
- не равно (!=)
- больше (>)
- меньше (<)
- больше или равно (>=)
- меньше или равно (<=)