END
439.00K
Category: programmingprogramming

Java. Типы данных, операторы, литералы

1.

Типы данных.
Различные операторы:
математические,
сравнения, логические,
битовые, тернарные,
сдвига.
Литералы.

2.

Создание объектов:
Создание ссылки на объект класса String:
String s;
Для того чтобы связать ссылку с объектом используется оператор
new (говорящий – создай экземпляр заданного класса и помести
его в динамическую память)
s = new String("asdf");
https://www.youtube.com/watch?v=450maTzSIvA

3.

Примитивы:

4.

Значения «по умолчанию» для примитивных типов
Если примитивный тип является членом класса, тогда он
гарантированно будет проинициализирован значением по
умолчанию, при условии отсутствия явной инициализации:
Для локальных переменных
int x;
Будет ошибка на этапе компиляции говорящая о том, что
переменная не была проинициализирована

5.

Ключевое слово static
Предпосылки:
Необходимость обеспечить единственное хранилище для общего
поля
Необходимость метода, который не ассоциируется с
определенным экземпляром класса, а непосредственно с самим
классом.
class StaticTest {
static int i = 47;
}
StaticTest st1 = new StaticTest();
st1.i // StaticTest.i
class Incrementable {
static void increment() { StaticTest.i++; }
}

6.

Математические операторы:
Оператор принимает один или несколько аргументов и возвращает
новое значение.
Практически все операторы работают только с примитивными
типами. Исключение составляет '=', '==' и '!=', которые работают со
всеми типами объектов. В добавок, класс String поддерживает
операторы '+’ и '+='.
Основные математические операторы:
сложение (+), вычитание (-), деление (/), умножение (*)
и остаток от деления (%).
Если при делении используются целые числа, то результат
усекается а не округляется.
Сокращенная запись x += 4; // x = x + 4;
Также:
a++; // ++a;
a--; // --a;

7.

Значения NaN и Infinity
Все операции над числами с плавающей точкой производятся по
стандарту IEEE 754.
Inifinity – бесконечность
Может получаться, например, в результате деления на ноль.
Константы определены в классах Double и Float
•Double.NEGATIVE_INFINITY
•Double.POSITIVE_INFINITY
NaN (Not-a-Number) –значение, используемое для представления
результата некоторой некорректной операции, такой как деление 0
на 0.
Константы определены в классах Double и Float
Double.NaN
Double.NaN == Double.NaN // false -> Double.isNaN()
System.out.println(1d/0d); // вернет Infinity
System.out.println(0d/0d); // вернет NaN

8.

Приведение типов
Ручное приведение типов – c использованием конструкции (<тип>)
byte b = (byte)intVal;
Автоматическое преобразование типов производится виртуальной
машиной при выполнении математических операций:
•над переменными разного типа – результат приводится к старшему
типу.
•когда результирующее значение должно получиться большего
размера – к типу, старшему чем тип операндов.
Например, выражение
byte b = 10;
b = b*(byte)2;
Не будет работать, т.к. необходимо ручное преобразование к byte
При делении целых чисел друг на друга преобразование к double или
float не производится – и дробная часть отбрасывается. Поэтому, если
она необходима – нужно преобразовать один и операндов в double
вручную
double d = 3 / 2; // d будет иметь значение 1.0
d = (double)3 / 2; // d будет иметь значение 1.5

9.

BigInteger and BigDecimal
Типы float и double не подходят для вычислений,
в которых требуется высокая точность
System.out.println(1.03 – 0.42); // Распечатает 0.6100000000000001
Чтобы гарантировать точность вычислений, используйте вместо
double - BigDecimal, вместо int - BigInteger
BigDecimal d1 = new BigDecimal("1.03");
BigDecimal d2 = new BigDecimal("0.42");
System.out.println(d1.subtract(d2)); // Распечатает 0.61

10.

Операторы сравнения:
Операторы сравнения: меньше (<), больше (>), меньше либо
равно(<=), больше либо равно(>=), равно (==) и не равно (!=).
Операторы на равенство и не равенство работают со всеми
примитивными типами, остальные операторы не работают только
для типа boolean.
Для ссылочных типов операторы == и != сравнивают ссылки
которые а не само содержимое объектов.
Если есть необходимость сравнивать содержимое объектов, тогда
необходимо использовать специальный метод equals( ), который
существует для всех объектов (не примитивных типов, которым
достаточно операторов == и !=).

11.

Логические операторы:
Каждый логический оператор AND (&&), OR (||) или NOT (!)
генерирует boolean значение (true или false) на основе логической
связи аргументов.
Операторы AND, OR, или NOT можно использовать только для
boolean значений.
Работая с логическими операторами, необходимо учитывать так
называемый “быстрый цикл обработки.” Который означает, что
операнды будут исполнятся до тех пор пока не будет известен
однозначный результат целого выражения.

12.

Поразрядные операторы:
Поразрядные операторы позволяют манипулировать
определенными битами примитивных типов. Эти операторы
выполняют Булевскую алгебру для соответствующих бит
аргументов с последующей генерацией результата.
Поразрядные операторы имеют сокращенную запись с
оператором = :
&=, |= и ^= (~ является унарным оператор, и поэтому не имеет
сокращенной записи с =.)
Тип boolean ведет себя как значение с одним разрядом. Так что
следующие операторы могут применяться и к boolean типу тоже:
AND, OR, и XOR, за исключением NOT (чтобы избежать путаницы
с логическим NOT).

13.

Тернарные операторы:
Тернарный оператор, так же еще называеться условным
оператором, необычен тем, что имеет три операнда.
boolean-exp ? value0 : value1
Если boolean-exp возвращает true, тогда исполняется, а его
результат становиться результатом всего выражения. Если
boolean-exp возвращает false – выполняется value1 и его результат
становиться результатом всего выражения.

14.

Операторы сдвига:
Operator left-shift (<<) produces the operand to the left of the operator
after it has been shifted to the left by the number of bits specified to the
right of the operator (inserting zeroes at the lower-order bits)
The signed right-shift operator (>>) produces the operand to the left of
the operator after it has been shifted to the right by the number of bits
specified to the right of the operator. The signed right shift >> uses sign
extension:
Java has also added the unsigned right shift >>>, which uses zero
extension:
If you shift a char, byte, or short, it will be promoted to int before the
shift takes place, and the result will be an int.
Shifts can be combined with the equal sign (<<= or >>= or >>>=).

15.

Иерархия операций

16.

Литералы
int i1 = 0x2f; // Hexadecimal (lowercase)
int i2 = 0X2F; // Hexadecimal (uppercase)
int i3 = 0177; // Octal (leading zero)
int i4 = 0b1001_0010; // Binary(leading zero with b) // >= Java 7
char c = 0xffff; // max char hex value
long n1 = 200L; // long suffix
long n2 = 200l; // long suffix (but can be confusing)
long n3 = 200;
float f1 = 1;
float f2 = 1F; // float suffix
float f3 = 1f; // float suffix
double d1 = 1d; // double suffix
double d2 = 1D; // double suffix
Integer and Long classes;
Integer.toBinaryString( );

17.

String и операторы + и +=
Если выражение начинается со String, тогда все последующие операнды
должны быть Strings (компилятор так же автоматически преобразует
последовательность символов в двойных кавычках в экземпляр класса
String)
int length() - возвращает длину строки (количество символов в строке).
String concat(String s) - присоединяет строку s к строке this
String trim() - удаляет ведущие и завершающие пробельные символы из
строки this (пробельными символами считаются: ' ', \r, \n, \t).
String replace(char original, char replacement) - заменяет все вхождения
символа original символом replacement.
String toLowerCase() - изменяет регистр символов в строке, делая все
буквы строчными.
String toUpperCase() - изменяет регистр символов в строке, делая все
буквы прописными
String replaceAll(String regex, String replacement)) – замещает все
вхождения regex на replacement. В качестве regex может быть регулярное
выражение
String replaceFirst(String regex, String replacement) – то же, только
замещает первое вхождение
http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

18.

Math
Класс предназначен для выполнения базовых математических
операций над числами, таких как:
•возведение в степень
•вычисление корня,
•логарифмирование,
•тригонометрические функции
•округление до ближайшего целого
•поиск минимального и максимального значения
double x = Math.sqrt(4);
double y = Math.pow(x, a);
http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html

19.

Random
Служит для генерации последовательностей псевдослучайных чисел
Random r = new Random();
for (int i = 0; i < 5; i++) {
System.out.println(r.nextInt(100)); // Генерирует числа от 0 до 100
}
В конструкторе можно задать инициирующее значение, на основании
которого будет генерироваться последовательность.
Random r = new Random(123456);
Два объекта Random с одинаковым инициирующим числом будут
генерировать одинаковые последовательности.
Если используется пустой конструктор – в качестве инициирующего
числа берется System.currentTimeMillis();
Также доступны методы:
nextBoolean()
nextDouble()
nextInt() // числа от Integer. MIN_VALUE до Integer.MAX_VALUE
и др.
http://docs.oracle.com/javase/7/docs/api/java/util/Random.html

20.

Ввод и вывод
• Вывод информации в стандартный поток вывода (т.е.
консольное окно):
System.out.print();
• Для того чтобы считать информацию из стандартного потока
ввода System.in необходимо следующее:
Scanner in = new Scanner(System.in); // из пакета java.util
-> nextLine();
-> next();
-> nextInt();
-> nextDouble();
http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

21. END

English     Русский Rules