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

Содержание

Слайд 2

Создание ссылки на объект класса String: String s; Для того чтобы

Создание ссылки на объект класса String:
String s;
Для того чтобы связать ссылку

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

Создание объектов:

Слайд 3

Примитивы:

Примитивы:

Слайд 4

Значения «по умолчанию» для примитивных типов Если примитивный тип является членом

Значения «по умолчанию» для примитивных типов

Если примитивный тип является членом

класса, тогда он гарантированно будет проинициализирован значением по умолчанию, при условии отсутствия явной инициализации:

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

Слайд 5

Ключевое слово static Предпосылки: Необходимость обеспечить единственное хранилище для общего поля

Ключевое слово 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 Все операции над числами с плавающей точкой

Значения 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 использованием конструкции ( )

Приведение типов

Ручное приведение типов – 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 не подходят для вычислений,

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

Логические операторы:

Каждый логический оператор 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 ( The signed right-shift operator (>>) produces

Операторы сдвига:

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 =

Литералы

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,

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 Класс предназначен для выполнения базовых математических операций над числами, таких

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

Служит для генерации последовательностей псевдослучайных чисел
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