Тема: Символы и строки (продолжение).
Начиная с версии 15 Java поддерживает тестовые блоки (text blocks) - многострочный текст, облеченный в тройные кавычки. Рассмотрим, в чем их практическая польза. Например, выведем большой многострочный текст:
С помощью операции + мы можем присоединить к одному тексту другой, причем продолжение текста может располагаться на следующей строке. Чтобы при выводе текста происходил перенос на следующую строку, применяется последовательность \n.
Текстовые блоки, которые появились в JDK15, позволяют упростить написание многострочного текста:
Весь текстовый блок оборачивается в тройные кавычки, при этом не надо использовать соединение строк или последовательность \n для их переноса.
Начиная с версии 15 Java поддерживает тестовые блоки (text blocks) - многострочный текст, облеченный в тройные кавычки. Рассмотрим, в чем их практическая польза. Например, выведем большой многострочный текст:
String text = "Вот мысль, которой весь я предан,\n"+
"Итог всего, что ум скопил.\n"+
"Лишь тот, кем бой за жизнь изведан,\n"+
"Жизнь и свободу заслужил.";
System.out.println(text);
С помощью операции + мы можем присоединить к одному тексту другой, причем продолжение текста может располагаться на следующей строке. Чтобы при выводе текста происходил перенос на следующую строку, применяется последовательность \n.
Текстовые блоки, которые появились в JDK15, позволяют упростить написание многострочного текста:
String text = """
Вот мысль, которой весь я предан,
Итог всего, что ум скопил.
Лишь тот, кем бой за жизнь изведан,
Жизнь и свободу заслужил.
""";
System.out.println(text);
Весь текстовый блок оборачивается в тройные кавычки, при этом не надо использовать соединение строк или последовательность \n для их переноса.
Тема: Консольный ввод/вывод в Java.
Наиболее простой способ взаимодействия с пользователем представляет консоль: мы можем выводить на консоль некоторую информацию или, наоборот, считывать с консоли некоторые данные. Для взаимодействия с консолью в Java применяется класс System, а его функциональность собственно обеспечивает консольный ввод и вывод.
Наиболее простой способ взаимодействия с пользователем представляет консоль: мы можем выводить на консоль некоторую информацию или, наоборот, считывать с консоли некоторые данные. Для взаимодействия с консолью в Java применяется класс System, а его функциональность собственно обеспечивает консольный ввод и вывод.
#Вопросы_с_собеседований.
Вопрос:
Что такое JRE?
Ответ:
1) Java Runtime Environment.
2) JRE относится к среде выполнения, в которой может выполняться байт-код Java.
3)Это реализация JVM, которая существует физически.
Вопрос:
Что такое JVM?
Ответ:
1) Java Virtual Machine.
2) Это абстрактная машина. Это спецификация, которая обеспечивает среду выполнения, в которой может выполняться байт-код.
3) JVM следует за тремя обозначениями: спецификация, реализация и экземпляр среды выполнения.
Вопрос:
Что такое JRE?
Ответ:
1) Java Runtime Environment.
2) JRE относится к среде выполнения, в которой может выполняться байт-код Java.
3)Это реализация JVM, которая существует физически.
Вопрос:
Что такое JVM?
Ответ:
1) Java Virtual Machine.
2) Это абстрактная машина. Это спецификация, которая обеспечивает среду выполнения, в которой может выполняться байт-код.
3) JVM следует за тремя обозначениями: спецификация, реализация и экземпляр среды выполнения.
Тема: Вывод на консоль.
Для создания потока вывода в класс System определен объект out. В этом объекте определен метод println, который позволяет вывести на консоль некоторое значение с последующим переводом курсора консоли на следующую строку. Например:
В метод println передается любое значение, как правило, строка, которое надо вывести на консоль. И в данном случае мы получим следующий вывод:
Hello world!
Bye world...
При необходимости можно и не переводить курсор на следующую строку. В этом случае можно использовать метод System.out.print(), который аналогичен println за тем исключением, что не осуществляет перевода на следующую строку.
Консольный вывод данной программы:
Hello world!Bye world...
Но с помощью метода System.out.print также можно осуществить перевод каретки на следующую строку. Для этого надо использовать escape-последовательность \n:
Для создания потока вывода в класс System определен объект out. В этом объекте определен метод println, который позволяет вывести на консоль некоторое значение с последующим переводом курсора консоли на следующую строку. Например:
public class Program {
public static void main(String[] args) {
System.out.println("Hello world!");
System.out.println("Bye world...");
}
}
В метод println передается любое значение, как правило, строка, которое надо вывести на консоль. И в данном случае мы получим следующий вывод:
Hello world!
Bye world...
При необходимости можно и не переводить курсор на следующую строку. В этом случае можно использовать метод System.out.print(), который аналогичен println за тем исключением, что не осуществляет перевода на следующую строку.
public class Program {
public static void main(String[] args) {
System.out.print("Hello world!");
System.out.print("Bye world...");
}
}
Консольный вывод данной программы:
Hello world!Bye world...
Но с помощью метода System.out.print также можно осуществить перевод каретки на следующую строку. Для этого надо использовать escape-последовательность \n:
System.out.print("Hello world \n");Тема: Вывод на консоль (продолжение).
Консольный вывод программы:
x=5; y=6
Но в Java есть также функция для форматированного вывода, унаследованная от языка С: System.out.printf(). С ее помощью мы можем переписать предыдущий пример следующим образом:
В данном случае символы %d обозначают спецификатор, вместо которого подставляет один из аргументов. Спецификаторов и соответствующих им аргументов может быть множество. В данном случае у нас только два аргумента, поэтому вместо первого %d подставляет значение переменной x, а вместо второго - значение переменной y. Сама буква d означает, что данный спецификатор будет использоваться для вывода целочисленных значений.
public class Program {
public static void main(String[] args) {
int x=5;
int y=6;
System.out.println("x=" + x + "; y=" + y);
}
}
Консольный вывод программы:
x=5; y=6
Но в Java есть также функция для форматированного вывода, унаследованная от языка С: System.out.printf(). С ее помощью мы можем переписать предыдущий пример следующим образом:
int x=5;
int y=6;
System.out.printf("x=%d; y=%d \n", x, y);
В данном случае символы %d обозначают спецификатор, вместо которого подставляет один из аргументов. Спецификаторов и соответствующих им аргументов может быть множество. В данном случае у нас только два аргумента, поэтому вместо первого %d подставляет значение переменной x, а вместо второго - значение переменной y. Сама буква d означает, что данный спецификатор будет использоваться для вывода целочисленных значений.
Тема: Вывод на консоль (продолжение).
Кроме спецификатора %d мы можем использовать еще ряд спецификаторов для других типов данных:
- %x: для вывода шестнадцатеричных чисел
- %f: для вывода чисел с плавающей точкой
- %e: для вывода чисел в экспоненциальной форме, например, 1.3e+01
- %c: для вывода одиночного символа
- %s: для вывода строковых значений
Например:
При выводе чисел с плавающей точкой мы можем указать количество знаков после запятой, для этого используем спецификатор на %.2f, где .2 указывает, что после запятой будет два знака. В итоге мы получим следующий вывод:
Name: Tom Age: 30 Height: 1,70
Кроме спецификатора %d мы можем использовать еще ряд спецификаторов для других типов данных:
- %x: для вывода шестнадцатеричных чисел
- %f: для вывода чисел с плавающей точкой
- %e: для вывода чисел в экспоненциальной форме, например, 1.3e+01
- %c: для вывода одиночного символа
- %s: для вывода строковых значений
Например:
public class Program {
public static void main(String[] args) {
String name = "Tom";
int age = 30;
float height = 1.7f;
System.out.printf("Name: %s Age: %d Height: %.2f \n", name, age, height);
}
}
При выводе чисел с плавающей точкой мы можем указать количество знаков после запятой, для этого используем спецификатор на %.2f, где .2 указывает, что после запятой будет два знака. В итоге мы получим следующий вывод:
Name: Tom Age: 30 Height: 1,70
#Вопросы_с_собеседований.
Вопрос:
Почему Java не на 100% объектно-ориентирована?
Ответ:
Потому что в ней используются восемь примитивных типов данных, таких как boolean, byte, char, int, float, double, long, short, которые не являются объектами.
Вопрос:
Что такое классы-оболочки?
Ответ:
Классы-оболочки преобразуют примитивы в ссылочные типы (объекты). Каждому примитивному типу данных посвящен класс. Они известны как классы-оболочки, потому что они «оборачивают» примитивный тип данных в объект этого класса.
Вопрос:
Почему Java не на 100% объектно-ориентирована?
Ответ:
Потому что в ней используются восемь примитивных типов данных, таких как boolean, byte, char, int, float, double, long, short, которые не являются объектами.
Вопрос:
Что такое классы-оболочки?
Ответ:
Классы-оболочки преобразуют примитивы в ссылочные типы (объекты). Каждому примитивному типу данных посвящен класс. Они известны как классы-оболочки, потому что они «оборачивают» примитивный тип данных в объект этого класса.
Тема: Ввод с консоли.
Для получения ввода с консоли в классе System определен объект in. Однако непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner, который, в свою очередь использует System.in. Например, напишем маленькую программу, которая осуществляет ввод чисел:
Для получения ввода с консоли в классе System определен объект in. Однако непосредственно через объект System.in не очень удобно работать, поэтому, как правило, используют класс Scanner, который, в свою очередь использует System.in. Например, напишем маленькую программу, которая осуществляет ввод чисел:
import java.util.Scanner;
public class Program {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Input a number: ");
int num = in.nextInt();
System.out.printf("Your number: %d \n", num);
in.close();
}
}
Тема: Ввод с консоли (продолжение).
Так как класс Scanner находится в пакете java.util, то мы вначале его импортируем с помощью инструкции import java.util.Scanner.
Для создания самого объекта Scanner в его конструктор передается объект System.in. После этого мы можем получать вводимые значения. Например, в данном случае вначале выводим приглашение к вводу и затем получаем вводимое число в переменную num.
Чтобы получить введенное число, используется метод in.nextInt();, который возвращает введенное с клавиатуры целочисленное значение.
Пример работы программы:
Input a number: 5
Your number: 5
Так как класс Scanner находится в пакете java.util, то мы вначале его импортируем с помощью инструкции import java.util.Scanner.
Для создания самого объекта Scanner в его конструктор передается объект System.in. После этого мы можем получать вводимые значения. Например, в данном случае вначале выводим приглашение к вводу и затем получаем вводимое число в переменную num.
Чтобы получить введенное число, используется метод in.nextInt();, который возвращает введенное с клавиатуры целочисленное значение.
Пример работы программы:
Input a number: 5
Your number: 5
Тема: Ввод с консоли (продолжение).
Класс Scanner имеет еще ряд методов, которые позволяют получить введенные пользователем значения:
- next(): считывает введенную строку до первого пробела
- nextLine(): считывает всю введенную строку
- nextInt(): считывает введенное число int
- nextDouble(): считывает введенное число double
- nextBoolean(): считывает значение boolean
- nextByte(): считывает введенное число byte
- nextFloat(): считывает введенное число float
- nextShort(): считывает введенное число short
То есть для ввода значений каждого примитивного типа в классе Scanner определен свой метод.
Класс Scanner имеет еще ряд методов, которые позволяют получить введенные пользователем значения:
- next(): считывает введенную строку до первого пробела
- nextLine(): считывает всю введенную строку
- nextInt(): считывает введенное число int
- nextDouble(): считывает введенное число double
- nextBoolean(): считывает значение boolean
- nextByte(): считывает введенное число byte
- nextFloat(): считывает введенное число float
- nextShort(): считывает введенное число short
То есть для ввода значений каждого примитивного типа в классе Scanner определен свой метод.
Тема: Ввод с консоли (продолжение).
Создадим программу для ввода информации о человеке:
Здесь последовательно вводятся данные типов String, int, float и потом все введенные данные вместе выводятся на консоль.
Создадим программу для ввода информации о человеке:
import java.util.Scanner;
public class Program {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Input name: ");
String name = in.nextLine();
System.out.print("Input age: ");
int age = in.nextInt();
System.out.print("Input height: ");
float height = in.nextFloat();
System.out.printf("Name: %s Age: %d Height: %.2f \n", name, age, height);
in.close();
}
}
Здесь последовательно вводятся данные типов String, int, float и потом все введенные данные вместе выводятся на консоль.
Тема: Ввод с консоли (продолжение).
Пример работы программы:
Input name: Tom
Input age: 34
Input height: 1,7
Name: Tom Age: 34 Height: 1,70
Обратите внимание, что для ввода значения типа float (то же самое относится к типу double) применяется число "1,7", где разделителем является запятая, а не "1.7", где разделителем является точка. В данном случае все зависит от текущей языковой локализации системы. В моем случае русскоязычная локализация, соответственно вводить необходимо числа, где разделителем является запятая. То же самое касается многих других локализаций, например, немецкой, французской и т.д., где применяется запятая.
Пример работы программы:
Input name: Tom
Input age: 34
Input height: 1,7
Name: Tom Age: 34 Height: 1,70
Обратите внимание, что для ввода значения типа float (то же самое относится к типу double) применяется число "1,7", где разделителем является запятая, а не "1.7", где разделителем является точка. В данном случае все зависит от текущей языковой локализации системы. В моем случае русскоязычная локализация, соответственно вводить необходимо числа, где разделителем является запятая. То же самое касается многих других локализаций, например, немецкой, французской и т.д., где применяется запятая.
#Вопросы_с_собеседований.
Вопрос:
Что такое конструкторы?
Ответ:
Конструктор относится к блоку кода, который используется для инициализации объекта. Он должен иметь то же имя, что и класс. Кроме того, он не имеет возвращаемого типа и автоматически вызывается при создании объекта.
Есть два типа конструкторов:
- Конструктор по умолчанию: тот, который не принимает никаких входных данных. Другими словами, конструкторы по умолчанию – это конструкторы без аргументов, которые будут созданы по умолчанию, если пользователь не определил другой конструктор. Его основная цель – инициализировать переменные экземпляра значениями по умолчанию. Кроме того, он в основном используется для создания объектов.
- Параметризованный конструктор: конструктор, способный инициализировать переменные экземпляра с предоставленными значениями. Другими словами, конструкторы, принимающие аргументы, называются параметризованными конструкторами.
Вопрос:
Что такое конструкторы?
Ответ:
Конструктор относится к блоку кода, который используется для инициализации объекта. Он должен иметь то же имя, что и класс. Кроме того, он не имеет возвращаемого типа и автоматически вызывается при создании объекта.
Есть два типа конструкторов:
- Конструктор по умолчанию: тот, который не принимает никаких входных данных. Другими словами, конструкторы по умолчанию – это конструкторы без аргументов, которые будут созданы по умолчанию, если пользователь не определил другой конструктор. Его основная цель – инициализировать переменные экземпляра значениями по умолчанию. Кроме того, он в основном используется для создания объектов.
- Параметризованный конструктор: конструктор, способный инициализировать переменные экземпляра с предоставленными значениями. Другими словами, конструкторы, принимающие аргументы, называются параметризованными конструкторами.
Тема: Арифметические операции
Большинство операций в Java аналогичны тем, которые применяются в других си-подобных языках. Есть унарные операции (выполняются над одним операндом), бинарные - над двумя операндами, а также тернарные - выполняются над тремя операндами. Операндом является переменная или значение (например, число), участвующее в операции. Рассмотрим все виды операций.
В арифметических операциях участвуют числа. В Java есть бинарные арифметические операции (производятся над двумя операндами) и унарные (выполняются над одним операндом). К бинарным операциям относят следующие:
+
операция сложения двух чисел:
Большинство операций в Java аналогичны тем, которые применяются в других си-подобных языках. Есть унарные операции (выполняются над одним операндом), бинарные - над двумя операндами, а также тернарные - выполняются над тремя операндами. Операндом является переменная или значение (например, число), участвующее в операции. Рассмотрим все виды операций.
В арифметических операциях участвуют числа. В Java есть бинарные арифметические операции (производятся над двумя операндами) и унарные (выполняются над одним операндом). К бинарным операциям относят следующие:
+
операция сложения двух чисел:
int a = 10;
int b = 7;
int c = a + b; // 17
int d = 4 + b; // 11
Тема: Арифметические операции (продолжение).
-
операция вычитания двух чисел:
*
операция умножения двух чисел
/
операция деления двух чисел:
-
операция вычитания двух чисел:
int a = 10;
int b = 7;
int c = a - b; // 3
int d = 4 - a; // -6
*
операция умножения двух чисел
int a = 10;
int b = 7;
int c = a * b; // 70
int d = b * 5; // 35
/
операция деления двух чисел:
int a = 20;
int b = 5;
int c = a / b; // 4
double d = 22.5 / 4.5; // 5.0
Тема: Арифметические операции (продолжение).
При делении стоит учитывать, что если в операции участвуют два целых числа, то результат деления будет округляться до целого числа, даже если результат присваивается переменной float или double:
Чтобы результат представлял число с плавающей точкой, один из операндов также должен представлять число с плавающей точкой:
При делении стоит учитывать, что если в операции участвуют два целых числа, то результат деления будет округляться до целого числа, даже если результат присваивается переменной float или double:
double k = 10 / 4; // 2
System.out.println(k);
Чтобы результат представлял число с плавающей точкой, один из операндов также должен представлять число с плавающей точкой:
double k = 10.0 / 4; // 2.5
System.out.println(k);
Тема: Арифметические операции (продолжение).
%
получение остатка от деления двух чисел:
Также есть две унарные арифметические операции, которые производятся над одним числом: ++ (инкремент) и -- (декремент). Каждая из операций имеет две разновидности: префиксная и постфиксная:
++ (префиксный инкремент)
Предполагает увеличение переменной на единицу, например, z=++y (вначале значение переменной y увеличивается на 1, а затем ее значение присваивается переменной z)
%
получение остатка от деления двух чисел:
int a = 33;
int b = 5;
int c = a % b; // 3
int d = 22 % 4; // 2 (22 - 4*5 = 2)
Также есть две унарные арифметические операции, которые производятся над одним числом: ++ (инкремент) и -- (декремент). Каждая из операций имеет две разновидности: префиксная и постфиксная:
++ (префиксный инкремент)
Предполагает увеличение переменной на единицу, например, z=++y (вначале значение переменной y увеличивается на 1, а затем ее значение присваивается переменной z)
int a = 8;
int b = ++a;
System.out.println(a); // 9
System.out.println(b); // 9
#Вопросы_с_собеседований.
Вопрос:
Что такое одноэлементный класс?
Ответ:
Класс Singleton – это класс, только один экземпляр которого может быть создан в любой момент времени в одной JVM. Класс можно сделать одноэлементным, сделав его конструктор закрытым.
Вопрос:
Почему не используются указатели?
Ответ:
Не используются указатели, потому что они небезопасны и усложняют программу. Поскольку Java известна своей простотой кода, добавление концепции указателей будет противоречивым. Более того, поскольку JVM отвечает за неявное выделение памяти, таким образом, чтобы избежать прямого доступа пользователя к памяти, в Java не рекомендуется использовать указатели.
Вопрос:
Что такое одноэлементный класс?
Ответ:
Класс Singleton – это класс, только один экземпляр которого может быть создан в любой момент времени в одной JVM. Класс можно сделать одноэлементным, сделав его конструктор закрытым.
Вопрос:
Почему не используются указатели?
Ответ:
Не используются указатели, потому что они небезопасны и усложняют программу. Поскольку Java известна своей простотой кода, добавление концепции указателей будет противоречивым. Более того, поскольку JVM отвечает за неявное выделение памяти, таким образом, чтобы избежать прямого доступа пользователя к памяти, в Java не рекомендуется использовать указатели.
Тема: Арифметические операции (продолжение).
++ (постфиксный инкремент)
Также представляет увеличение переменной на единицу, например, z=y++ (вначале значение переменной y присваивается переменной z, а потом значение переменной y увеличивается на 1)
++ (постфиксный инкремент)
Также представляет увеличение переменной на единицу, например, z=y++ (вначале значение переменной y присваивается переменной z, а потом значение переменной y увеличивается на 1)
int a = 8;
int b = a++;
System.out.println(a); // 9
System.out.println(b); // 8
Тема: Арифметические операции (продолжение).
-- (префиксный декремент)
уменьшение переменной на единицу, например, z=--y (вначале значение переменной y уменьшается на 1, а потом ее значение присваивается переменной z)
-- (префиксный декремент)
уменьшение переменной на единицу, например, z=--y (вначале значение переменной y уменьшается на 1, а потом ее значение присваивается переменной z)
int a = 8;
int b = --a;
System.out.println(a); // 7
System.out.println(b); // 7
Тема: Арифметические операции (продолжение).
-- (постфиксный декремент)
z=y-- (сначала значение переменной y присваивается переменной z, а затем значение переменной y уменьшается на 1)
-- (постфиксный декремент)
z=y-- (сначала значение переменной y присваивается переменной z, а затем значение переменной y уменьшается на 1)
int a = 8;
int b = a--;
System.out.println(a); // 7
System.out.println(b); // 8