#Оффтоп
#Вопросы_с_собеседований
Задание:
Какие типы данных есть в Java?
Ответ:
В Java есть примитивные типы данных:
byte — целые числа в пределах -128 до 127, весит 1 байт;
short — целые числа в пределах -32768 до 32767, весит 2 байта;
int — целые числа -2147483648 до 2147483647, весит 4 байта;
long — целые числа в пределах 9223372036854775808 до 9223372036854775807, весит 8 байтов;
float — числа с плавающей запятой в пределах -3.4E+38 до 3.4E+38, весит 4 байта;
double — числа с плавающей запятой в пределах -1.7E+308 до 1.7E+308, весит 8 байтов;
char — одиночные символы в UTF-16, весит 2 байта;
boolean значения true/false, весит 1 байт.
И ссылочные типы данных, которые указывают на объекты в куче.
P.S.: Про ссылочные типы подробнее расскажем далее
#Вопросы_с_собеседований
Задание:
Какие типы данных есть в Java?
Ответ:
В Java есть примитивные типы данных:
byte — целые числа в пределах -128 до 127, весит 1 байт;
short — целые числа в пределах -32768 до 32767, весит 2 байта;
int — целые числа -2147483648 до 2147483647, весит 4 байта;
long — целые числа в пределах 9223372036854775808 до 9223372036854775807, весит 8 байтов;
float — числа с плавающей запятой в пределах -3.4E+38 до 3.4E+38, весит 4 байта;
double — числа с плавающей запятой в пределах -1.7E+308 до 1.7E+308, весит 8 байтов;
char — одиночные символы в UTF-16, весит 2 байта;
boolean значения true/false, весит 1 байт.
И ссылочные типы данных, которые указывают на объекты в куче.
P.S.: Про ссылочные типы подробнее расскажем далее
Тема: Символы и строки.
В качестве значения переменная символьного типа получает одиночный символ, заключенный в одинарные кавычки: char ch='e';. Кроме того, переменной символьного типа также можно присвоить целочисленное значение от 0 до 65535. В этом случае переменная опять же будет хранить символ, а целочисленное значение будет указывать на номер символа в таблице символов Unicode (UTF-16). Например:
Еще одной формой задания символьных переменных является шестнадцатеричная форма: переменная получает значение в шестнадцатеричной форме, которое следует после символов "\u". Например, char ch='\u0066'; опять же будет хранить символ 'f'.
Символьные переменные не стоит путать со строковыми, 'a' не идентично "a". Строковые переменные представляют объект String, который в отличие от char или int не является примитивным типом в Java:
В качестве значения переменная символьного типа получает одиночный символ, заключенный в одинарные кавычки: char ch='e';. Кроме того, переменной символьного типа также можно присвоить целочисленное значение от 0 до 65535. В этом случае переменная опять же будет хранить символ, а целочисленное значение будет указывать на номер символа в таблице символов Unicode (UTF-16). Например:
char ch=102; // символ 'f'
System.out.println(ch);
Еще одной формой задания символьных переменных является шестнадцатеричная форма: переменная получает значение в шестнадцатеричной форме, которое следует после символов "\u". Например, char ch='\u0066'; опять же будет хранить символ 'f'.
Символьные переменные не стоит путать со строковыми, 'a' не идентично "a". Строковые переменные представляют объект String, который в отличие от char или int не является примитивным типом в Java:
String hello = "Hello...";
System.out.println(hello);
Тема: Символы и строки (продолжение).
Кроме собственно символов, которые представляют буквы, цифры, знаки препинания, прочие символы, есть специальные наборы символов, которые называют управляющими последовательностями. Например, самая популярная последовательность - "\n". Она выполняет перенос на следующую строку. Например:
Результат выполнения данного кода:
Hello
world
В данном случае последовательность \n будет сигналом, что необходимо сделать перевод на следующую строку.
Кроме собственно символов, которые представляют буквы, цифры, знаки препинания, прочие символы, есть специальные наборы символов, которые называют управляющими последовательностями. Например, самая популярная последовательность - "\n". Она выполняет перенос на следующую строку. Например:
String text = "Hello \nworld";
System.out.println(text);
Результат выполнения данного кода:
Hello
world
В данном случае последовательность \n будет сигналом, что необходимо сделать перевод на следующую строку.
#Вопросы_с_собеседований
Вопрос:
Объясните что такое JDK?
Ответ:
1) Java Development Kit
2) Это инструмент, необходимый для компиляции, документирования и упаковки программ Java.
3) Он содержит инструменты разработки JRE +.
Вопрос:
Объясните что такое JDK?
Ответ:
1) Java Development Kit
2) Это инструмент, необходимый для компиляции, документирования и упаковки программ Java.
3) Он содержит инструменты разработки JRE +.
Тема: Символы и строки (продолжение).
Начиная с версии 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);