- Переменные
- Литералы
- Условия
- Циклы
- byte - целое, один байт со знаком -128..127
- short - целое, два байта со знаком -32.768..32.767
- int - целое, 4 байта со знаком -2^31..2^31-1
- long - целое, 8 байт со знаком -2^63..2^63-1
- float - действительное число (32-bit IEEE 754 floating point)
- double - действительное число двойной точности (8 байт)
- boolean - логический тип (true и false)
- char - символ (2 байта) '\u0000'..'\uffff'
- класс String
if, else, while, switch
public class HelloWorld {
public static void main(String[] args) {
/*
Многострочный комментарий
*/
// Однострочный комментарий
System.out.println("Hello, world!");
//int i; // В стек основного потока main
//Runtime.getRuntime().gc();
}
}Если вы изучали Pascal/Delphi:
Writeln('Hello, world!');C/С++:
printf("Hello, world!\n"); // С
cout << "Hello, world!" << endl; // C++src/main/java/p00_helloworld/HelloWorld.java
// Шаблон: psvm + <tab>
// [p]ublic [s]tatic [v]oid [m]ain
public static void main(String[] args) {
// sout
System.out.println();
System.out.println("Hello world!");
// soutv - + вывести значение последней переменной
int ii = 10;
System.out.println("ii = " + ii);
int i1 = 1;
int i2 = 2;
int i3 = 3;
System.out.println("i3 = " + i3);
// soutm + <tab> - название метода
System.out.println("IdeaLiveTemplates.main");
System.out.println("args = [" + args + "]");
// fori + <tab> - цикл по целочисленной переменной
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
for (int k = 0; k < 10; k++) {
for (int l = 0; l < 10; l++) {
for (int m = 0; m < 10; m++) {
}
}
}
}
}
for (int j = 0; j < 10; j++) {
System.out.println("j = " + j);
}
for (int j = 0; j < 10; j++) {
for (int k = 0; k < 10; k++) {
System.out.println(j * k);
}
}
}src/main/java/p00_helloworld/IdeaLiveTemplates.java
// Ещё один "главный" класс в другом пакете
package p00_helloworld.subpackage;
public class Main {
public static void main(String[] args) {
int i = 10;
System.out.println("Привет всем!");
}
}src/main/java/p00_helloworld/subpackage/Main.java
Целочисленные типы:
- 8 битное целое - byte: -128..127. Подробнее: http://ru.wikipedia.org/wiki/Дополнительный_код_(представление_числа)
| Двоичное | Дополнительный код | Байт |
|---|---|---|
| 00000000 | 0 | 0 |
| 00000001 | 1 | 1 |
| 00000010 | 2 | 2 |
| 00000011 | 3 | 3 |
| 00000100 | 4 | 4 |
| ... | ... | ... |
| 01111111 | 127 | 127 |
| 10000000 | -128 | 128 |
| ... | ... | ... |
| 11111111 | -1 | 255 |
- 16-битное целое short: -2^15..2^15-1 -32768..32767
short sh = 32767; // -32768..32767
System.out.println("short = " + sh + " " +
Short.MIN_VALUE + ".." + Short.MAX_VALUE);- 32-битное целое int
int integerBinary = 0b10101010; // Начиная с Java7
System.out.println("Integer.toBinaryString(integerBinary) = " + Integer.toBinaryString(integerBinary));
// Java6
int intBin = Integer.parseInt("1011", 2);
int intX = Integer.parseInt("23422", 6);
System.out.println("intBin = " +
Integer.toBinaryString(intBin));
int integerHex = 0xFFA9; // Шестнадцатеричная система счисления
System.out.printf("%d ", integerHex);
System.out.printf("Hex: %X %n", integerHex); // FFA9
System.out.printf("Hex: %x %n", integerHex); // ffa9
System.out.printf("Hex: %08X %n", integerHex); // 0000FFA9
// CR LF - Windows 13 10
// LF - Unix 13
// CR - MacOS 10
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
int maxInt = 2147483647; // 2^31-1
System.out.printf("maxInt = %08X %n", maxInt);
System.out.println("Integer.MAX_VALUE = " + Integer.MAX_VALUE);- 64-битное целое long -128..127
& - побитовое И && 0011 0101 0001
| - побитовое ИЛИ 0011 0101 0111
~ - побитовое НЕ 01 10
^ - XOR - исключающее ИЛИ 0011 0101 0110
Вещественные типы (действительные) - IEEE 5. float - 4 байта 6. double - 8 байт 10101101 * 2^{1010101} Длинная арифметика 7. Логический тип: true / false && - И || - ИЛИ
true / false && - логическое И || - логическое ИЛИ Boolean 8. Символьный тип char
Переменные, методы, классы можно называть по-русски, имена в кодировке Unicode И это лучше чем в транслите Условный оператор if
//if(2 && 3){
//
//}
if (a > 1 && a < 10 || !(a == 11)) { // Когда условие истинно
System.out.println("a большая :)");
} else { // в противоположном случае
System.out.println("a маленькая или очень большая");
}Цикл с предусловием - While Цикл с постусловием - Repeat Until Цикл for Вывод аргументов командной строки foreach
// Сложение
a = a + 10;
a += 10;
// Вычитание
a = a - 11;
a -= 11;
// Умножение
a = a * 3;
a *= 3;
// Деление
a = a / 2;
a /= 2;
// Взять по модулю
a = a % 5;
a %= 5;
// Инкремент
a = a + 1;
a++; // Постфиксная форма
++a; // Префиксная форма
int int2 = 0; int2--; --int2;
System.out.println("a = " + a);
a = 2;
int aa = a++ + a++; // aa = 4
System.out.println("aa = " + aa);
int a1 = ++a;
System.out.println("a1 = " + a1);
++a; // Префиксная форма
// Декремент
a = a - 1;
a--;
--a;src/main/java/p01_datatypes/A_PrimitiveTypes.java
Scanner scanner = new Scanner(System.in);
// Читаем целое число с клавиатуры
int a = scanner.nextInt();
if (a == 10) {
System.out.println("a равно 10");
} else {
System.out.println("a не равно 10");
}
if (a >= 10) {
System.out.println("a >= 10");
}src/main/java/p01_datatypes/B_if_else.java
Проверяем что a+b = c в double Обработка погрешности Проверяем что a+b = c в float src/main/java/p01_datatypes/C2_FloatAccuracy.java
double a = 0.3;
double b = 0.6;
double c = 0.9;
// Корректная проверка что a + b == c
if (Math.abs(a + b - c) < 1e-15) {
System.out.println("Равно");
} else {
System.out.println("Не равно!");
System.out.println("c - (a+b) = " +
(c - (a + b)));
}src/main/java/p01_datatypes/C_FloatAccuracy.java
// Инициализация
int[] intArray1 = new int[]{1, 2, 3, 10};
// Сокращённая форма инициализации
int[] intArray2 = {1, 2, 3, 10};
// Массив - можно сразу не инициализировать
int[] intArray3;
intArray3 = new int[100];Пробегаем по всем элементам массива
for (int i = 0; i < intArray2.length; i++) {
System.out.println("intArray1[" + i + "] = " +
intArray1[i]);
}
// Если нам не важны индексы,
// то мы можем использовать цикл "foreach"
for (int i : intArray1) {
System.out.print(i + " ");
}
System.out.println(); // Просто перевод строкиДвухмерный массив
int[][] array2D = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int x = array2D[0][1]; // Элемент массива с индексом 0 1
array2D[1][1] = 231; // Новое значениеsrc/main/java/p01_datatypes/D_Arrays.java
i примитивного типа - передаётся по значению
int i = 10;
// Integer
Integer ii = i; // Boxing
int iii = ii; // Unboxing
assertEquals("Перед вызовом method1", 10, i);
System.out.println("Перед вызовом method1 i = " + i);
method1(i);
assertEquals("После вызова method1", 10, i);
System.out.println("После вызова method1 i = " + i); MyClass object = new MyClass();
object.i = 10;
assertEquals("Перед вызовом method2", 10, object.i);
System.out.println("Перед вызовом method2 object.i = " + object.i);
myMethod2(object);
assertEquals("После вызова myMethod2", 30, object.i);
System.out.println("После вызова method2 object.i = " + object.i);i значение копируется
static void method1(int i) {
i += 20;
System.out.println("method1: i = " + i);
assertEquals("method1: ", 30, i);
}i передаётся по ссылке
static void myMethod2(MyClass i) {
//i = new MyClass();
i.i += 20;
assertEquals("myMethod2: ", 30, i.i);
} static class MyClass {
int i;
}src/main/java/p01_datatypes/E_ByValueByReference.java
// 8 базовых (примитивных) типов
// 4 целочисленных типа (знаковые)
byte myByte = -100; // 1 байт
short myShort = -1231; // 2 байта
int myInt = 24346363; // 4 байта
long myLong = 469523695623L; // 8 байт
// 2 вещественных типа
float myFloat = 23234.0f; // 4 байта
double myDouble = 12425.523; // 8 байт
// символьный тип
char myChar = 'a';
// логический тип
boolean myBoolean1 = true;
myBoolean1 = false;Массивы Арифметические операции
int c = a + b; // сложение
// - - вычитание
c = a - b;
// * - умножение
c = a * b;
// / - деление
c = a / b;
// % - по модулю
c = a % b;
// Побитовые операции:
// >> - сдвиг вправо
c = a >> b;
// << - сдвиг влево
c = a << b;
// | - ИЛИ (OR)
c = a | b;
// & - И (AND)
c = a & b;
// ^ - ИСКЛЮЧАЮЩЕЕ ИЛИ - XOR
c = a ^ b;
// ~ - Побитовое отрицание (NOT)
c = ~a;
// Логические операции:
// && - И (AND)
boolean cb, ab = true, bb = false;
cb = ab && bb;
// || - ИЛИ (OR)
cb = ab || bb;
// ! - НЕ (NOT)
cb = !ab;
// Сокращённая форма
c += a;
c -= a;
c *= a;
c /= a;
c %= a;
// Инкремент и декремент
++a;
a++; // Увеличение на единицу
--a;
a--; // Уменьшение на единицуsrc/main/java/p01_datatypes/H_Operators.java
%d - целые числа %n - перевод строки соответствующий платформе 13,10 - Windows CRLF 10 - *nix LF 13 - MacOS (классических, до перехода на ядро BSD) CR 3 символа на каждое число В шестнадцатеричном виде af3d AF3D 0000FE23 Перевод Действительные числа 1.1221E+12 src/main/java/p01_datatypes/I_Printf.java
Решение квадратного уравнения
Назначаем локаль, чтобы разделителем целой и десятичной дроби была "." Считываем коэффициенты с клавиатуры
double a, b, c;
Scanner s = new Scanner(System.in);
System.out.println("== Решение квадратного уравнения ==");
System.out.println("Введите коэффициенты");
System.out.print("a = ");
a = s.nextDouble(); // 1.2213
System.out.print("b = ");
b = s.nextDouble();
System.out.print("c = ");
c = s.nextDouble();Вычисляем дискриминант: double D = b * b - 4 * a * c;
double D = pow(b, 2) - 4 * a * c; // pow - powerТеперь проверяем знак дискриминанта
if (abs(D) < 1e-16) {
double x = -b / (2 * a);
System.out.println("x = " + x);
return;
}
if (D < 0.0) {
System.out.println("Решений нет!");
} else {
double x1 = (-b + sqrt(D)) / (2 * a);
double x2 = (-b - sqrt(D)) / (2 * a);
System.out.println("x1 = " + x1 + " x2 = " + x2);
}src/main/java/p01_datatypes/Z_SquareEq.java
Цикл с предусловием while(условие) тело_цикла;
int N = 6;
System.out.print("N = " + N + " = (inverse binary) = ");
while (N > 0) {
System.out.print("" + N % 2);
N /= 2;
}
System.out.println();Цикл с постусловием do { тело_цикла } while (условие);
int x = 1000;
do {
x -= 99;
System.out.println("x = " + x);
} while (x > 10);Цикл for(инициализация; условие продолжения; после итерации)
System.out.println(" Таблица умножения ");
System.out.println("===================");
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 10; j++) {
System.out.printf("%3d", i * j);
}
System.out.println();
}
// Таблица умножения
// ===================
// 1 2 3 4 5 6 7 8 9
// 2 4 6 8 10 12 14 16 18
// 3 6 9 12 15 18 21 24 27
// 4 8 12 16 20 24 28 32 36
// 5 10 15 20 25 30 35 40 45
// 6 12 18 24 30 36 42 48 54
// 7 14 21 28 35 42 49 56 63
// 8 16 24 32 40 48 56 64 72
// 9 18 27 36 45 54 63 72 81src/main/java/p02_cycles/Cycles.java
7968b25127064f5457bc24be25031cc6d9552a93
ASCII код 10 - LF - \n - перевод строки ASCII код 13 - CR - \r - возврат каретки MacOSX: 0 10 LF Windows: 0 13 CR + 1 10 LF MacOSX: 0 10 LF src/test/java/p01_datatypes/NewLineTest.java
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html Подстрока Создание пустой строки Returns the char value at the specified index Сравнение строк Сравнение без учёта регистра Массив символов с символа по символ Замена символов replace Шаблоны Шаблон телефонного номера
Сравнение строк
``` java
@Test
public void testStrEq() {
String a = "test 1";
String b = a.substring(0, 4);
System.out.println("a = " + a);
System.out.println("b = " + b);
assertEquals("test", b);
String c = "test";
System.out.println("c = " + c);
System.out.println("(c == b) = " + (c == b));
System.out.println("c.equals(b) = " + c.equals(b));
assertFalse(c == b);
assertTrue(c.equals(b));
}
//<!--
@Test
public void testArrayString() {
String cmd = "sudo -E";
String[] split = cmd.split("\\s+");
assertArrayEquals(new String[]{"sudo", "-E", "cmd", "arg"}, concat(split, new String[]{"cmd", "arg"}));
}
}
[src/test/java/p01_datatypes/StringTest.java](src/test/java/p01_datatypes/StringTest.java)