Java for Beginner
673 subscribers
541 photos
155 videos
12 files
827 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Почему все-таки программирование?
(немного еженедельной мотивации на моем примере)

Мне, без года 40-летнему человеку, по теории, должно было быть сложно менять профессию.
Тем более, я уже успел получить несколько других и добиться в них немалого успеха.


Так почему же я решился на такую авантюру? (а по другому, мои родные это не называли 😂)

Вот некоторые из тех принципов, которые определили пройденный путь:

1. Успех в определенной профессии != достойной зарплате и условиям труда 🫰.

Поработав в разных сферах и в разных условиях, посмотрев как трудятся люди разных профессий, начинаешь понимать ценность спокойной, "удаленной" работы и достойного, денежного эквивалента этого труда. ☝️

2. Развитие и перспективы в обозримом будущем 🏝.

По моему скромному мнению, пределов развития и так называемого "потолка", у человека выбравшего программирование - нет. Вот нет и все. Кто готов поспорить - жду в комментариях 🤓

А есть лишь естественные причины - физические ограничения и ЛЕНЬ.
😵

А это значит, что пока руки поднимаются - опускать их мимо клавиатуры, противоестественно! 💪

3. Неугасаемый интерес к процессу созидания (написанию кода) 🧑‍💻.

Один из мощнейших, мотивационных принципов для меня.

Ведь, что может быть прекраснее, чем наблюдать как созданный тобой корабль (условно, конечно же), держится и продолжает плыть в самом современном море, которое еще не исследовано до конца? ⛵️


Все это, в совокупности, перевесило мое нежелание (или инерцию мышления и жизни) изучать программирование.

И даже когда (очень часто, столкнувшись с нерешаемой задачей 😭) мне казалось, что я сделал опрометчиво-глупый выбор - эти принципы помогали преодолеть сомнения (и конечно же задачу, потому что нерешаемых задач НЕТ 💪).

😎

#motivation
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Еще раз всем привет.

После всех размышлений про то, как и какого уровня публиковать посты, я пришел к решению, что буду писать 1, редко два, обучающих поста в день.

Почему так?

Сейчас, я активно перерабатываю структуру тем, для обучения Java с самого нуля.

В ходе переработки я поймал мысль, что в спешке получения оффера, я недостаточно глубоко изучил основы языка. Как, к примеру происходит работа с памятью, JVM, какие процессы происходят, скрытые, но необходимые для полного понимания разработки.


Поэтому, посты будут выходить поочередно, о темах связанных с основами Java и темах middle+, с изучением новых технологий.

При этом в постах о основах Java я постараюсь рассмотреть тему настолько глубоко, насколько это вообще возможно. Это даст необходимые знания для новичков и наверняка будет интересно и более опытным разработчикам.

Ну и обещая ввести новую рубрику, давайте начнем прямо сегодня.

Ждите поста ниже!
Новая рубрика! ✈️

Предложение тем для разбора и публикации! 📖

В комментариях к данному посту предлагайте вопросы, которые вы хотели бы увидеть максимально подробно разобранными в постах, а если будет интересно то и на видео.

Голосование будет проводиться всю неделю, а статья или видео - выходить по выходным.

Примерные правила:
🟢 1 вопрос - от одного участника.
🟢 темы, не выше уровня middle, чтоб был интерес общим.

Жду Ваших предложений! 👏
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Примитивные типы данных в Java

Примитивные типы данных в Java представляют собой фундаментальные элементы языка, разработанные для обеспечения высокой производительности, компактного представления в памяти и эффективного взаимодействия с аппаратным обеспечением.


1. Философия проектирования

При разработке Java было принято решение о введении примитивных типов как части ядра языка, несмотря на общий объектно-ориентированный подход.

Это обусловлено несколькими причинами:
Минимизация накладных расходов. Объекты требуют размещения в куче, участия в сборке мусора и хранения служебной информации. Использование объектов для представления простых значений, таких как числа или логические флаги, приводит к неоправданным издержкам по памяти и времени выполнения.
int x = 42;                  // примитив, 4 байта
Integer y = Integer.valueOf(42); // объект, ~16+ байт


Предсказуемость поведения. Размеры всех примитивных типов жёстко заданы и не зависят от платформы. Например, тип int всегда занимает 32 бита, в отличие от языков вроде C/C++, где размер целого числа может варьироваться в зависимости от архитектуры.
System.out.println(Integer.SIZE); // 32 — всегда


Соответствие аппаратному уровню. Примитивы напрямую сопоставимы с регистрами процессора и машинными инструкциями. Это обеспечивает аппаратное ускорение вычислений и минимальные издержки при выполнении арифметических операций.
int sum = a + b; // напрямую транслируется в инструкцию iadd в JVM


2. Низкоуровневое представление

Каждый примитивный тип в Java представлен последовательностью битов и интерпретируется согласно определённой модели:
Целочисленные типы (byte, short, int, long) хранятся в представлении с дополнительным кодом (two’s complement). Это обеспечивает корректную работу с отрицательными значениями.
int a = -1;
System.out.println(Integer.toBinaryString(a)); // 11111111111111111111111111111111


Типы с плавающей точкой (float, double) соответствуют стандарту IEEE 754.
double d = 3.14;
System.out.println(Double.toHexString(d)); // 0x1.91eb851eb851fp1


Символьный тип (char) реализован как 16-битное беззнаковое значение.
char ch = 'Ж';
System.out.println((int) ch); // 1046 — Unicode-код символа


Логический тип (boolean) не имеет фиксированного размера, но часто реализуется как int.
boolean flag = true;
if (flag) {
System.out.println("Включено");
}


3. Размещение в памяти и управление временем жизни


Примитивные переменные в Java хранятся по-разному в зависимости от контекста:

Локальные переменные методов размещаются в стеке вызовов.
void compute() {
int localCounter = 0; // хранится в стеке
}


Поля объектов хранятся непосредственно в их структуре в куче.
class Data {
int x = 10; // хранится в объекте в куче
}


4. Механизмы выполнения в JVM

Для каждого примитива в спецификации JVM предусмотрены специализированные инструкции байт-кода.
int x = 2, y = 3;
int result = x * y; // используется imul в байт-коде


Примитивы не участвуют в иерархии наследования, не реализуют интерфейсы и не имеют методов.
int a = 5;
// a.compareTo(3); // ошибка компиляции — у int нет методов


5. Обёртки и автоупаковка

Для интеграции примитивов в объектную модель Java были введены соответствующие классы-обёртки:

Integer wrapped = 42;   // автоупаковка
int raw = wrapped; // автораспаковка


Нужно учитывать возможные проблемы:
Integer i = null;
// int val = i; // NullPointerException при распаковке


6. Ограничения примитивов

Примитивы нельзя использовать напрямую в обобщённых коллекциях.
List<Integer> list = new ArrayList<>();
list.add(10); // автоматическая упаковка int → Integer


Сравнение обёрток может вести к неожиданным результатам:
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true (значения до 127 хранятся в кэше)
Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false (разные объекты)


Производительность может снижаться из-за постоянной упаковки/распаковки:
for (int i = 0; i < 1000; i++) {
list.add(i); // создаётся 1000 объектов Integer
}


#Java #для_новичков #beginner #primitive_types
Что выведет код?

public class Task120525 {
public static void main(String[] args) {
byte a = 100;
byte b = 30;
byte c = (byte) (a + b);
System.out.println(c);
}
}


#Tasks
Варианты ответа:
Anonymous Quiz
4%
30
30%
130
51%
-126
15%
Ошибка компиляции
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Gson: основы сериализации и десериализации

1. Что такое Gson и зачем он нужен

Gson — это библиотека от Google для работы с JSON в Java.


Она позволяет:
Преобразовывать Java-объекты в JSON (сериализация).
Восстанавливать Java-объекты из JSON (десериализация).


Почему Gson?
Простота: минимум кода для работы.
Мощность: поддержка сложных структур (коллекции, вложенные объекты, generics).
Нет зависимостей: работает без дополнительных библиотек.


Пример JSON и его Java-представление

Допустим, у нас есть JSON:
{
"name": "John",
"age": 30,
"isDeveloper": true
}


Ему соответствует Java-класс:
public class Person {
private String name;
private int age;
private boolean isDeveloper;

// Конструктор, геттеры и сеттеры (обязательны для корректной работы)
public Person(String name, int age, boolean isDeveloper) {
this.name = name;
this.age = age;
this.isDeveloper = isDeveloper;
}

// Геттеры и сеттеры (опущены для краткости, но должны быть)
}


Подключение Gson

Через Maven (добавить в pom.xml):

<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version> <!-- Актуальная версия на момент 2025 года -->
</dependency>


Через Gradle (добавить в build.gradle):
implementation 'com.google.code.gson:gson:2.10.1'



2. Простая сериализация Java-объекта в JSON


Создание POJO

POJO (Plain Old Java Object) — простой Java-класс с полями, конструктором и геттерами/сеттерами.

Пример:
public class Book {
private String title;
private String author;
private double price;

public Book(String title, String author, double price) {
this.title = title;
this.author = author;
this.price = price;
}

// Геттеры (обязательны для сериализации)
public String getTitle() { return title; }
public String getAuthor() { return author; }
public double getPrice() { return price; }
}


Сериализация с помощью Gson.toJson()

Создаем объект Gson:
Gson gson = new Gson();


Сериализуем объект в JSON-строку:
Book book = new Book("Clean Code", "Robert Martin", 29.99);
String json = gson.toJson(book);


Выводим результат:

System.out.println(json);


Результат:
{"title":"Clean Code","author":"Robert Martin","price":29.99}


Как это работает?

Gson рефлективно анализирует поля класса.
Имена полей становятся ключами JSON.
Примитивы (int, boolean), строки (String) и числа с плавающей точкой (double) преобразуются в соответствующие JSON-типы.


Полный пример кода
import com.google.gson.Gson;

public class Main {
public static void main(String[] args) {
// Создаем объект
Book book = new Book("Clean Code", "Robert Martin", 29.99);

// Сериализуем в JSON
Gson gson = new Gson();
String json = gson.toJson(book);

// Выводим JSON
System.out.println(json);
}
}


Вывод:
{"title":"Clean Code","author":"Robert Martin","price":29.99}


Важные замечания

Поля должны быть private (или иметь геттеры).
Поля со значением null не включаются в JSON (если не настроено иначе).
Gson автоматически обрабатывает вложенные объекты и коллекции.


#Java #middle #Gson
Что выведет код?

public class Task130525 {
public static void main(String[] args) {
String s = "123abc";
int num = Integer.parseInt(s);
System.out.println(num);
}
}


#Tasks