Java
Виртуална машина на Java 1/3
Виртуална машина на Java 2/3
Виртуална машина на Java 3/3
Версии на Java, JRE (Java Runtime Environment) и JDK(Java Developers Kit)
Java и останалите програмни езици
Преимущества на Java
Eлементи в синтаксиса на Java
Пакети в Java 1/2
Пакети в Java 2/2
Пакети java и javax
Структура на програмата в Java
Java <-> C++
Типове данни в Java
Tипове данни в Java
Литерални константи в Java
Примитивни типове данни в Java
Декларация и инициализация на променливи
Пример 1: Декларация на променливи
Пример 2: Декларация на променливи
Пример 3: Декларация на променливи
Целочислени типове в Java
Целочислени типове Java <-> С++
Типове за числа с плаваща запетая
Работа с числа: преобразуване на типа
Работа с числа: boxing и unboxing
Работа с числа: парсиране
Пример: Използване на методи, изхвърлящи изключения
Работа с числа: форматиране
Математични функции и константи: класът  java.lang.Math 1/2
Типът char и кoдиране на текста в Java
Булев тип
Константи в Java
Константи на класа в Java
Изброени константи в Java
Типове-референции в Java
Операции в Java
Въвеждане от конзолата: System.in, System.out, System.err
Конзолен изход (System.оut)
Вход от клавиатурата с BufferedReader 1/2
Конзолен вход с BufferedReader 2/2
Вход от клавиатурата със Scanner
Методи на Scanner
BufferedReader<-> Scanner
Форматирано извеждане
Форматиран изход: форматни спецификатори
Форматиран изход: флагове
Форматиране – най-често използвани форматни спецификатори
1.36M
Категория: ПрограммированиеПрограммирование

Java. Tипове данни, операции, конзолен вход-изход

1. Java

Tипове данни, операции, конзолен
вход-изход

2. Виртуална машина на Java 1/3


Kомпилаторът на Java транслира програмата в байт код, който е подобен на
obj кода, генериран от компилатoра на С++ или друг език
Разликата е, че тези компилатори генерират обектен код за определен
процесор, докато компилаторът на Java – за псевдо CPU.
Sun Microsystems създават виртуален процесор в паметтта (псевдо CPU) и
разработват система от инструкции за този виртуален процесор

3. Виртуална машина на Java 2/3

JVM (Java Virtual Machine)
• обезпечава среда за
изпълнение Java байткода
• Тя предоставя също така
интерпретатор на байткод и
верификатор, който
потвърждава валидността му,
преди да го транслира и
изпълни за реалния CPU.
• Съдържа модули за проверка
на сигурността, за управление
на паметта и потоците и др.

4. Виртуална машина на Java 3/3

5. Версии на Java, JRE (Java Runtime Environment) и JDK(Java Developers Kit)


Java 15 (септември 2020) e последната пусната версия на Java, новите версии понастоящем излизат на
всеки 6 месеца
До Java 8, Oracle предоставя 2 като отделни дистрибутивни пакети
– Среда за изпълнение на Java (JRE), която включва виртуална машина на Java (JVM) библиотеката
от класове (Java class library), командата java ( стартираща Java програма) и друга инфраструктура,
необходими за изпълнение на компилирана Java програма
– За разработка на Java приложения е необходим JDK, който включва JRE (в отделна папка),
компилатор javac, генератор на документация javadoc и дeбъгер jdb
В Java 9 различието между JRE и JDK практически изчезва, за работа с Java винаги инсталираме JDK.
Структурата на папките също се изменя, в нея няма явна папка JRE.
Понастоящем използваме Java и JDK взаимозаменяемо

6.

7. Java и останалите програмни езици

8. Преимущества на Java


Small – изпълнимият код е с
малък размер
Simple – прост за изучаване
Object Oriented – липсват
елементи като структури и
обединения, които нарушават
принципите на ООП
Compiled и Interpreted
Platform Independent
Robust and Secure
Multithreaded
Dynamic

9. Eлементи в синтаксиса на Java


Символи, използване за писане на Java програми и кодирането на тези символи
Литерални значения, идентификатори и други ядра, съставящи Java програмата
Типове данни, които може да обработва Java
Oперации, използвани за групиране на индивидуалните ядра в по-големи изрази
Оператори, групиращи изрази и други оператори за формиране на логическите
блокове Java код.
Методи, които представляват именувани колекции от Java оператори, които
могат да бъдат извиквани от друг Java код
Класове, представляващи колекции от полета и методи. Класовете са централен
елемент в Java и лежат в основата на обектно-ориентираното програмиране
Пакети, представляващи колекции от свързани класове.
Java програми, състоящи се от един или повече взаимодействащи си класове от
един или повече пакети.

10. Пакети в Java 1/2


Пакети в Java 1/2
Пакетите в Java са механизъм за организиране на класовете в пространства от
имена
Представляват група свързани типове (класове, интерфейси, изброявания и
анотации), предоставящи защита на достъпа и управление на пространството
от имена.
– Позволяват група от класове да бъдат достъпвани по-лесно от други
класове
– Елиминират потенциалните конфликти на имена
Изходните файлове на Java, принадлежащи към определена категория или
обезпечаващи подобна функционалност, могат да включват оператора package
в началото
– Показва пакета, в който да се включат класовете, дефинирани в изходния
файл
– Ако не укажем пакет, класовете се записват в пакет без име (default
package)
За използване на класове от друг пакет, трябва да укажем пълното име на
пакета преди името на класа или да използваме оператора import за
включване на пакета във файла с изходен код

11. Пакети в Java 2/2


Пример: Класът Color се съдържа в пакета java.awt
– В програмите си се обръщаме към него java.awt.Color
– Ако включим всички класове от пакета с import java.awt.*, oбръщението
става само с Color
Пакетът java.lang съдържа класовете, които са фундаментални за създаването
на Java програма
– включва се автоматично (auto-import) във всяка java програма
javax указва, че пакетът е разширение (Java extension package), а не пакет от
ядрото
– От Java 2 javax .swing не е разширение, но за обратна съвместимост името
остава

12. Пакети java и javax

13. Структура на програмата в Java

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

14. Java <-> C++

Java <-> C++
– В Java всички функции са методи на даден клас
– Затова в Java трябва да имаме клас-обвивка на метода main
– Методът main в Java е винаги статичен - статичните методи се задават
в класа и се използват без обекти
– Методът main има тип void - за разлика от C/C++ не връща “exit code” на
операционната система
• Ако програмата на Java се изпълни нормално, тя връща код 0
• За прекратяване на програмата с различен код на изход, използваме метода
System.exit

15. Типове данни в Java


Строго типизиран език – всяка променлива има деклариран тип
Вградените типове данни в Java са 2 вида:
– Примитивни типове
– Класове обвивки за тези примитивни типове
8 примитивни типа в Java
– 4 за цели числа
– 2 за реални числа
– символен тип char за съхраняване на символи в Unicode
– булев тип
За всеки от тези примитивни типове Java поддържа клас-обвивка (wrapper
class)

16. Tипове данни в Java

17. Литерални константи в Java

18. Примитивни типове данни в Java

19. Декларация и инициализация на променливи

;
В Java не се разрешава използването на неинициализирани променливи:
int vacationDays;
System.out.println(vacationDays); // ERROR--variable not initialized
Декларация+присвояване или декларация с инициализация
int vacationDays;
vacationDays = 12;
int vacationDays = 12;
За разлика от С++ не може да се разделят декларацията и дефиницията
int i = 10; // дефиниция в С++
extern int i; //декларация в С++, не е допустимо в Java

20. Пример 1: Декларация на променливи

int age; // декларация
int age1 = 30; //декларация с инициализация
double salary; // декларация
double salary1 = 100000.00;
char c = 'a'; // символна константа - в единични кавички
String s = "a"; // низова константа - в двойни кавички
String employeeId = "1234";
String s1 = null; // инициализация с null
float sum = 10.00f; // със суфикс, f означава float
long password = 123456789123456789L;
boolean valid = true;

21. Пример 2: Декларация на променливи

// int значения
int a = 0b10100101010001011010100101000101; // двоично значение
int b = 0B1010; // B може да бъде малка или главна
int c = 0xCAFFAABE; // шестнадесетично значение
// long значение (суфикс “L” )
long d =78998127812000L;

22. Пример 3: Декларация на променливи

long accountNumber = 5100_0129_6733L;
long uid = 123_456_789_123L;
int regno = 12_100_01;
int salary = 10._50; // грешка: използване на _ в реален литерал ( съдъжащ .)

23. Целочислени типове в Java

• Integer.MIN_VALUE и Integer.MAX_VALUE съдържат най-малкото и найголямото целочислено значение
Същите константи имат и класовете Long, Short, and Byte

24. Целочислени типове Java <-> С++

Целочислени типове Java <-> С++
C /C++ използват най-ефективния за всеки процесор целочислен тип размерите на типове като int и long зависят от платформата
– При 16-битови процесори те заемат 2 байта, а на 32 битовите - 4 байта
– Аналогично, значенията long са 4-байтови на 32-битовите процесори и 8байтови на 64-битовите
Тези различия затрудняват създаването на крос-платформени приложения
В Java размерите на всички числови типове не зависят от платформата
Java не поддържа беззнакови (unsigned) целочислени типове

25. Типове за числа с плаваща запетая


Както и в C /C++ , използват се float (6-7 значещи цифри) и double (15 значещи
цифри)
Типът double e подразбиращ се
– Константите от тип float се задават със суффикс F (f) – например,3.14F
Съществуват специални значения Double.POSITIVE_INFINITY за
, Double.NEGATIVE_INFINITY за – , Double.NaN за “not a number.”
– 1/0 генерира изключение
– 1.0 /0.0 дава Infinity
– 0.0/ 0.0 дава NaN
Проверка се прави с методите Double.isInfinite(), Double.isFinite(), Double.isNaN()

26. Работа с числа: преобразуване на типа


Java изпълнява неявно разширяващо преобразуване на типа (upcasting)
Явното преобразуване на типа става чрез името на типа в скоби
int x = 100;
long y = x; // неявно преобразуване
int z = (int)y; // явно преобразуване
Преобразуване между числовите типове
С плътни линии са
обозначени
преобразуванията,
при които няма
загуба на точност

27. Работа с числа: boxing и unboxing


Java изпълнява автоматично преобразуването между примитивните типове и
типовете-обвивки
Boxing - преобразуване от примитивен тип към инстанция на класа-обвивка,
например от int към java.lang.Integer
Unboxing - преобразуване от клас-обвивка към примитивен тип, например
от Byte към byte.
Примери:
Integer i = 5; // boxing
int j = 0;
j = new Integer(5); // unboxing

28. Работа с числа: парсиране


преобразуване текст (обект string в Java) в числов тип
Класовете-обвивки на примитивните типове - Byte, Short, Integer, Long, Float,
и Double съдържат статични методи за парсиране на низове
Например, класът Integer съдържа метода parseInt със следната сигнатура
public static int parseInt(String s) throws NumberFormatException
ако низът не съдържа валидно представяне на цяло число, се изхвърля изключение
Пример:
int x = Integer.parseInt("123");

29. Пример: Използване на методи, изхвърлящи изключения

public class NumberTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String userInput = scanner.next();
try {
int i = Integer.parseInt(userInput);
System.out.println("The number entered: " + i);
} catch (NumberFormatException e) {
System.out.println("Invalid user input");
}
}
}

30. Работа с числа: форматиране


форматирането на числата според локализацията става чрез създаване на
обект NumberFormat , на който се подава обект Locale
import java.text.NumberFormat;
import java.util.Locale;
public class NumberFormatTest {
public static void main(String[] args) {
NumberFormat nf =
NumberFormat.getInstance((Locale.FRANCE););
System.out.println(nf.format(123445)); // 123 455
}
}

31. Математични функции и константи: класът  java.lang.Math 1/2

Математични функции и константи:
класът java.lang.Math 1/2
съдържа основните математични функции
някои от най-често използваните са:
Тригонометрични функции
Math.sin
Math.cos
Math.tan
Math.atan
Експоненциална и логаритмични функции
Math.exp
Math.log
Math.log10
Математични константи и е
Math.PI
Math.E

32.

Математични функции и константи:
класът java.lang.Math 2/2
Пример: Изчисляване на корен квадратен
double x = 4;
double y = Math.sqrt(x);
System.out.println(y); //извежда 2.0
e статичен метод, не се прилага върху обект за разлика от println()
Повдигане на степен:
sqrt()
double y = Math.pow(x, a);
За избягване на префикса Math
import static java.lang.Math.*;
System.out.println("The square root of \u03C0 is " + sqrt(PI));

33. Типът char и кoдиране на текста в Java


Типът char се използва за описване на единичен символ
– Символните литерали се задават единички кавички: например 'A' е
символен литерал със значение 65
– Той е различен от "A " - string , съдържащ 1 символ
• Tипът char и класът String поддържат Unicode значения
• Най-често използвания Unicode формат, UTF-8, е подразбиращ се в Java
• Teкстовете на различни езици се изобразяват коректно
• Unicode символът може да се представи чрез escape последователност
\uxxxx
където x e шестнадесетична цифра.
– Пример: \u2122 е символа trademark (™), \u03C0 –символа
• Използват се същите Escape символи, както и в C++- \n, \t, \b и т.н.

34. Булев тип


Типът boolean има 2 значения: false и true
Не може да преобразуваме целочислени значения в булеви
– Няма връзка между булевите значения и числовите 0 и 1
– В C++ могат да се използват числа и указатели като булеви значения
– Например:
if (x = 0) {…}
cе компилира в C++, но не и в Java

35. Константи в Java


Константите в Java се декларират с ключовата дума final ( за разлика от const в
С++)
final double CM_PER_INCH = 2.54;
Значението им не може да се променя след първата инициализация, която
може да бъде отложена
boolean leapYear=false;
final int DAYS_IN_FEBRUARY;
if (leapYear) {
DAYS_IN_FEBRUARY = 29;
} else {
DAYS_IN_FEBRUARY = 28;
}

36. Константи на класа в Java


Kонстанти на класа – използват се от няколко метода на класа, по своя
смисъл са статични (т.е. общи за всички обекти от класа)
Декларират се в класа, извън методите, със static final
public class Example {
public static final double CM_PER_INCH = 2.54;
public static final int MAX = 100;
public static final boolean isModified = false;
}

37. Изброени константи в Java


Често използваме взаимосвързани константи
Вместо
public static final int MONDAY = 0;
public static final int TUESDAY = 1;
можем да запишем
enum Weekday { MON, TUE, WED, THU, FRI, SAT, SUN };
• Weekday става име на тип със значения Weekday.MON , Weekday.ТUE и т.н.
• Moжем да декларираме и инициализираме променливи
Weekday day1= Weekday.MON;

38. Типове-референции в Java


Примитивните типове са типове-значения
Обектите от производните типове: масиви, класове и интерфейси, са
референции
Foo myFoo = new Foo();// създаване на обект от клас Foo
Foo anotherFoo = myFoo; //деклариране на референция към Foo
Имаме две референции, но само една инстанция на обекта
Референциите са подобни на указатели, но със строга проверка на
типовете

39. Операции в Java

40. Въвеждане от конзолата: System.in, System.out, System.err

• System.in: стандартен вход от клавиатурата, представя обект
inputStream – входен поток
• System.out: стандартен конзолен изход , представя обект PrintStream
• System.err: работи като System.out, но се изполва за текста на грешки.
Среди като Eclipse извеждат текста в червено
try {
InputStream input = new FileInputStream("c:\\data\\...");
System.out.println("File opened...");
} catch (IOException e){
System.err.println("File opening failed:");
e.printStackTrace();
}

41. Конзолен изход (System.оut)


Основни методи са print и println
System.out.print("Hello ");
System.out.println("world"); // добавя символа за нов ред
out e член на класа java.lang.System и референция към обекта java.io.PrintSystem
В оператора System.out.println("xxx"); се обръщаме към члена out на класа System
който се съдържа в пакета java.lang – автоматично включван във всяка програма.

42. Вход от клавиатурата с BufferedReader 1/2


При четене с BufferedReader включваме: import java.io.*;
Използват се 2 потока InputStreamReader и BufferedReader
Необходими са поради разликите в скоростите на клавиатурата и компютъра
InputStreamreader получава данните от клавиатурата и преобразува ASCII
кода на символите в представянето на съответния тип данни
BufferedReader ги съхранява – Java чете данните от него ( след като са
получени)

43. Конзолен вход с BufferedReader 2/2


Предоставя метод readLine() ,който чете низ (string) от клавиатурата
За да се съхрани в променлива от примитивен тип, низът трябва да бъде парсиран
с метода parseXXX() на класа-обвивка
Вход от конзолата
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String text = in.readLine();
int x = Integer.parseInt(text);
double y = Double.parseDouble(text);
1_inputBR

44. Вход от клавиатурата със Scanner


За използването му: import java.util.Scanner;
Scanner чете входа по ядра, като разпознава 8 примитивни типа данни,
BigInteger и BigDecimal
• Създаването на обект Scanner може да стане с конструкциите:
Scanner( InputStream source ) - при източник System.in, Scanner чете от конзолата.
Scanner( File source ) – създава обект Scanner, който чете от файл
Scanner( String source ) – създава обект Scanner, който чете и парсира низ.
• Пример: парсиране на низ, съдържащ дата
String sampleDate = "24 Nov 2015";
Scanner sDate = new Scanner(sampleDate);
int day = sDate.nextInt();
String month = sDate.next();
int year = sDate.nextInt();
System.out.println(day+"-"+ month+"-" + year);

45. Методи на Scanner

46. BufferedReader<-> Scanner

BufferedReader<-> Scanner
Четене на цяло число:
BufferedReader input =
new BufferedReader(new InputStreamReader(System.in));
int T= Integer.parseInt(input.readLine());
Scanner reader = new Scanner(System.in);
int i = in.nextInt();
Демо: 1_student

47. Форматирано извеждане


Класът PrintStream от пакета java.io включва два метода за форматирано извеждане format и printf, които са еквивалентни
public PrintStream format(“Format string“, Object... args)
public PrintStream printf(“Format string“, Object... args)
System.out е обект от клас PrintStream , затова може да извикваме format и printf на
PrintStream чрез System.out
Format string има вида:

48. Форматиран изход: форматни спецификатори

49. Форматиран изход: флагове

50. Форматиране – най-често използвани форматни спецификатори

1_formattingBasic
1_formattingOutput
1_formattingOutput2
English     Русский Правила