Java

Использование Java-плагина

Установка:

# apt-get install icedtea-8-plugin

Запуск:

$ javaws --jnlp application.jnlp

Декомпиляция jar-файлов

Установим распаковщик ZIP-архивов и декомпилятор Java:

# apt-get install unzip procyon-decompiler

Распаковываем:

$ unzip ekicraft.jar

Декомпилируем:

$ procyon ekiInterface/JiAdminPanel.class

Для массовой декомпиляции всех class-файлов можно воспользоваться такой конструкцией:

$ find . -name \*.class | while read class;
do
  java=`echo "$class" | sed 's/class$/java/'`;
  procyon "$class" > "$java";
done

Hello world на Java

Устанавливаем JDK:

# apt-get install default-jdk

Создаём файл Test.java со следующим содержимым:

public class Test
{
      public static void main(String args[])
      {
          System.out.println("Hello, world!");
      }
}

Выполняем компиляцию файла Test.java:

$ javac Test.java

В результате компиляции должен получиться файл Test.class. Запустим его:

$ java Test

Запущенная программа должна вывести ожидаемый текст:

Hello, world!

Хорошее объяснение, почемку главная функция программы должна быть объявлена именно таким образом, можно найти в статье public static void main(String[] args) – Java main method.

Типы переменных

Элементарные типы переменных перечислены в таблице ниже:

Группа Тип данных Диапазон допустимых значений Объём занимаемой памяти
Целочисленные byte от -128 до 127 1 байт
short от -32768 до 32767 2 байта
int от -2147483648 до 2147483647 4 байта
long от -9223372036854775808 до 9223372036854775807 8 байт
С плавающей запятой float от -3.4E+38 до 3.4E+38 4 байта
double от -1.7E+308 до 1.7E+308 8 байт
Символы char от 0 до 65536 2 байт
Логические boolean true или false Для хранения значения этого типа достаточно 1 бита, но в реальности память такими порциями не выделяется, поэтому переменные этого типа могут быть по-разному упакованы виртуальной машиной.

Кроме элементарных типов переменных имеется ещё составной встроенный тип String для хранения строковых значений.

Объявление переменной:

тип_данных имя_переменной;

Имя переменной:

  • начинается с латинской буквы, знака $ или _,
  • не может начинаться с цифры.
  • содержит только латинские буквы.

Присваивание и константы

Примеры присваивания констант разных типов:

byte number1 = 15;
short number2 = 100;
long number3 = 100000000;
String title = "Обожаю Java";
char letter = 'M';
double sum = 145.34567;
float pi = 3.14f;
boolean result = true;

Строковые константы указываются в двойных кавычках.

Символьные константы указываются в одинарных кавычках.

Для переменных типа float к значениям обязательно добавляется буква f.

Комментарии к коду

Комментарии в Java бывают двух типов. Однострочные начинаются с двух косых черт и завершаются в конце строки:

// Выводит на консоль значение переменной k

Многострочные комментарии начинаются символами /* и заканчиваются символами */:

/*
 Программа, демонстрирующая выведение значения 
 переменной на консоль
*/

Операции с переменными

Операции делятся на три группы:

  • арифметические,
  • логические,
  • побитовые.

Арифметические операции:

  • сложение,
  • вычитание,
  • умножение,
  • деление,
  • деление по модулю.

Таблица операций:

Группа операций Название Полная форма Короткая форма Префиксная форма Постфиксная форма
Арифметические Сложение a = a + b a += b
Вычитание a = a - b a -= b
Умножение a = a * b a *= b
Деление a = a / b a /= b
Деление по модулю a = a % b a %= b
Инкремент ++a a++
Декремент --a a--
Логические Больше a > b
Больше или равно a >= b
Меньше a < b
Меньше или равно a <= b
Равно a == b
Не равно a != b
Не !a
Ленивое логическое И a = a && b a &&= b
Ленивое логическое ИЛИ a = a !! b a !!= b
Логическое И a = a & b a &= b
Логическое ИЛИ a = a ! b a != b
Логическое исключающиее ИЛИ a = a ^ b a ^= b
Побитовые Побитовое НЕ a = ~a
Побитовое И a = a & b a &= b
Побитовое ИЛИ a = a ! b a != b
Побитовое исключающиее ИЛИ a = a ^ b a ^= b
Побитовый сдвиг влево a = a << b a <<= b
Побитовый сдвиг вправо a = a >> b a >>= b
Беззнаковый побитовый сдвиг вправо a = a >>> b a >>>= b

При использовании префиксной формы оператора инкремента или декремента происходит сначала увеличение на единицу, затем использование нового значения в последующих вычислениях.

При использовании постфиксной формы значение переменной тоже увеличивается на единицу, однако в вычислениях используется старое значение переменной.

Ленивые логические операции не выполняют вычисление второго аргумента, если значения первого достаточно для того, чтобы определить результат. Например, если при ленивом вычислении операции логического И значение первого аргумента ложно, то результат будет заведомо ложный и вычислять второй аргумент не имеет смысла. Аналогично при ленивом вычислении операции логического ИЛИ не имеет смысла вычислять значение второго аргумента, если первый аргумент имеет истинное значение, т.к. результат в любом случае будет истинным. Если вычисление второго аргумента приводит к сторонним эффектам, которые важные для дальнейшего выполнения программы, нужно пользоваться логическими операциями с полным вычислением аргументов. Например, во втором аргументе может иметься операция инкремента или выполняться функция чтения данных из файла, которая должна быть выполнена в любом случае.

Операции |, & и ^ вычисляются как логические, применительно к логическим аргументам, и как битовые, если аргументы являются целыми числами.

Приоритеты операций в порядке понижения:

  • !
  • &
  • ^
  • |
  • &&
  • ||