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

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
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
Channel photo updated
Всем субботний, солнечный привет! ✌️

Целую неделю я думал над итогами опроса о канале.

На основные вопросы - почему новые подписчики приходят и потом уходят, почему имеющиеся поставили канал на заглушку и не читают его - напрашиваются вполне очевидные выводы:

- Не смотря на то, что канал называется Java для новичков, рассматриваемые темы давно ушли за мидловский предел.
- Нет внятного оглавления для поиска интересующей информации для разных грейдов.
- Объемные и подробные посты, неудобно читать к примеру с телефона.
- Сухость и формализм обучающих постов, полезны, но не интересны для новичков.
- Количество ежедневных постов, большинство скорее отталкивает, чем привлекает.

Основываясь на этих проблемах, с которыми Вы возможно согласны, я решил:

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


Что скажете на такие предложения? 🤓
Please open Telegram to view this post
VIEW IN TELEGRAM
Нужны ли нам посты для полных новичков в Java, по типу: Как запустить IDEA, как создать первый класс и так далее?
Anonymous Poll
20%
Да, несомненно! 👍
15%
Да, наверно.. 🤷‍♀️
43%
Не знаю. Мне точно не нужны ☺️
22%
Нет не нужны, в интернете много информации, пусть учатся гуглить 🖕
Почему все-таки программирование?
(немного еженедельной мотивации на моем примере)

Мне, без года 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