💻 JavaStartZero 🚀
23 subscribers
5 links
🚀 Привет, будущие разработчики! JavaStartZero - это твой главный ресурс для обучения программированию на Java с нуля. Здесь мы разбираемся в основах, концепциях и инструментах, которые помогут тебе стать успешным Java-разработчиком. 💻
Download Telegram
#Оффтоп
#Вопросы_с_собеседований

Задание:
Какие типы данных есть в 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). Например:
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". Она выполняет перенос на следующую строку. Например:
String text = "Hello \nworld";
System.out.println(text);

Результат выполнения данного кода:

Hello
world

В данном случае последовательность \n будет сигналом, что необходимо сделать перевод на следующую строку.
#Вопросы_с_собеседований
Вопрос
:
Объясните что такое JDK?

Ответ:
1) Java Development Kit
2) Это инструмент, необходимый для компиляции, документирования и упаковки программ Java.
3) Он содержит инструменты разработки JRE +.
Тема: Символы и строки (продолжение).

Начиная с версии 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, а его функциональность собственно обеспечивает консольный ввод и вывод.
#Вопросы_с_собеседований.

Вопрос:
Что такое JRE?

Ответ:
1) Java Runtime Environment.
2) JRE относится к среде выполнения, в которой может выполняться байт-код Java.
3)Это реализация JVM, которая существует физически.

Вопрос:
Что такое JVM?

Ответ:
1) Java Virtual Machine.
2) Это абстрактная машина. Это спецификация, которая обеспечивает среду выполнения, в которой может выполняться байт-код.
3) JVM следует за тремя обозначениями: спецификация, реализация и экземпляр среды выполнения.
Тема: Вывод на консоль.

Для создания потока вывода в класс 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");
Тема: Вывод на консоль (продолжение).

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: для вывода строковых значений

Например:
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, которые не являются объектами.

Вопрос:
Что такое классы-оболочки?

Ответ:
Классы-оболочки преобразуют примитивы в ссылочные типы (объекты). Каждому примитивному типу данных посвящен класс. Они известны как классы-оболочки, потому что они «оборачивают» примитивный тип данных в объект этого класса.
Тема: Ввод с консоли.

Для получения ввода с консоли в классе 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 имеет еще ряд методов, которые позволяют получить введенные пользователем значения:

- next(): считывает введенную строку до первого пробела

- nextLine(): считывает всю введенную строку

- nextInt(): считывает введенное число int

- nextDouble(): считывает введенное число double

- nextBoolean(): считывает значение boolean

- nextByte(): считывает введенное число byte

- nextFloat(): считывает введенное число float

- nextShort(): считывает введенное число short

То есть для ввода значений каждого примитивного типа в классе Scanner определен свой метод.
Тема: Ввод с консоли (продолжение).

Создадим программу для ввода информации о человеке:
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", где разделителем является точка. В данном случае все зависит от текущей языковой локализации системы. В моем случае русскоязычная локализация, соответственно вводить необходимо числа, где разделителем является запятая. То же самое касается многих других локализаций, например, немецкой, французской и т.д., где применяется запятая.
#Вопросы_с_собеседований.

Вопрос:
Что такое конструкторы?

Ответ:
Конструктор относится к блоку кода, который используется для инициализации объекта. Он должен иметь то же имя, что и класс. Кроме того, он не имеет возвращаемого типа и автоматически вызывается при создании объекта.

Есть два типа конструкторов:

- Конструктор по умолчанию: тот, который не принимает никаких входных данных. Другими словами, конструкторы по умолчанию – это конструкторы без аргументов, которые будут созданы по умолчанию, если пользователь не определил другой конструктор. Его основная цель – инициализировать переменные экземпляра значениями по умолчанию. Кроме того, он в основном используется для создания объектов.
- Параметризованный конструктор: конструктор, способный инициализировать переменные экземпляра с предоставленными значениями. Другими словами, конструкторы, принимающие аргументы, называются параметризованными конструкторами.
Тема: Арифметические операции

Большинство операций в 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:
double k = 10 / 4;     // 2
System.out.println(k);

Чтобы результат представлял число с плавающей точкой, один из операндов также должен представлять число с плавающей точкой:
double k = 10.0 / 4;     // 2.5
System.out.println(k);