Java for Beginner
685 subscribers
585 photos
161 videos
12 files
898 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
🔥7
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1🤔1
Еще раз всем привет.

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

Почему так?

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

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


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

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

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

Ждите поста ниже!
👍10😇2🤝1
Новая рубрика! ✈️

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

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

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

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

Жду Ваших предложений! 👏
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
📌 Факт дня:

А вы знали, что язык программирования BASIC был создан для студентов?

BASIC (Beginner's All-purpose Symbolic Instruction Code) был разработан в 1964 году Джоном Кемени и Томасом Куртцем в Дартмутском колледже, чтобы сделать программирование доступным для студентов, не связанных с математикой.


Узнать историю

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔2
Примитивные типы данных в 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
👍51
Что выведет код?

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
👍2
Варианты ответа:
Anonymous Quiz
4%
30
30%
130
51%
-126
15%
Ошибка компиляции
👍2
📌 Факт дня:

А вы знали, что первый компьютерный "курсор" был придуман в 1968 году?

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


Немного вики

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
📌 Цитата дня: Фил Циммерман

"Если конфиденциальность вне закона, то только преступники будут иметь конфиденциальность."


Фил Циммерман, создатель PGP, сказал это в 1991 году в интервью о криптографии и приватности.

Почитать короткую биографию

#Citation #Biography
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
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
👍5🔥2
Что выведет код?

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


#Tasks
👍1
👍1
📌 Факт дня:

А вы знали, что термин "гиперссылка" появился в 1965 году?

Тед Нельсон придумал слово "hyperlink" для своего проекта Xanadu, который предсказал Всемирную паутину. Его идеи о связях между документами легли в основу интернета.


proof

#facts
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1