Java for Beginner
672 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
Тема выходного дня)

Интересные факты о Java

Java – это не просто язык программирования, а целая экосистема с богатой историей и множеством любопытных аспектов.

1. Название и кофе

Вы, возможно, задавались вопросом, почему язык программирования называется Java. История уходит корнями в 1995 год, когда команда разработчиков из Sun Microsystems разрабатывала новый язык. Первоначально проект назывался Oak (Дуб) в честь дерева, росшего за окном офиса Джеймса Гослинга, одного из создателей Java. Однако позже выяснилось, что название Oak уже использовалось другим языком программирования. Тогда команда выбрала название Java в честь любимого кофе, который они пили во время работы над проектом. Именно поэтому логотип Java представляет собой чашку горячего кофе с поднимающимся паром.

2. Виртуальная машина Java (JVM)

Одним из ключевых нововведений, сделавших Java популярным, является концепция виртуальной машины Java (JVM). Вместо компиляции кода в машинный код конкретной платформы, Java компилирует код в байт-код, который затем интерпретируется JVM. Это означает, что один и тот же байт-код может выполняться на любой платформе, для которой существует реализация JVM. Это свойство известно как принцип "Write Once, Run Anywhere" (WORA), что значительно облегчает разработку кроссплатформенных приложений. Независимо от того, работаете ли вы на Windows, macOS, Linux или даже на Android, Java-программы будут работать одинаково.

3. Появление Java в веб-браузерах

В середине 1990-х годов Java привлекла внимание широкой аудитории благодаря возможности создавать апплеты – небольшие программы, которые можно было встроить в веб-страницы и выполнять в браузерах. Это был революционный шаг, так как позволял разработчикам создавать интерактивные элементы для веб-страниц, такие как игры, визуализации данных и другие динамические компоненты, которые ранее были недоступны. Хотя сегодня апплеты практически вышли из употребления из-за соображений безопасности и развития других технологий (например, JavaScript и HTML5), их вклад в популяризацию Java трудно переоценить.

4. Проект Green и создание языков для бытовых устройств

Изначально проект Java, известный как "Green Project", был запущен в 1991 году Джеймсом Гослингом и его командой в Sun Microsystems. Целью проекта было создание языка программирования для интерактивных телевизоров и других бытовых устройств. Однако проект оказался слишком сложным для тогдашнего рынка бытовой электроники. Когда интернет стал набирать популярность, команда увидела потенциал использования Java в сети, и язык программирования был переориентирован на создание кроссплатформенных интернет-приложений.

5. Платформа Java EE

Java EE – это набор спецификаций и библиотек, который расширяет возможности базовой платформы Java SE (Standard Edition) для создания масштабируемых, надежных и безопасных корпоративных приложений. Java EE включает в себя технологии для работы с веб-сервисами, сервлетами, Enterprise JavaBeans (EJB), а также средства для управления транзакциями и безопасности. Множество крупных организаций используют Java EE для создания сложных систем, таких как банковские приложения, системы управления заказами и крупные веб-порталы.

6. Кроссплатформенная игровая разработка

Java известна не только своими корпоративными и мобильными приложениями, но и играми. Один из самых известных примеров – это игра Minecraft, созданная Маркусом Перссоном (Notch) и выпущенная в 2009 году. Minecraft написана на Java и благодаря этому легко запускается на различных платформах, включая Windows, macOS и Linux. Java также широко используется для создания серверных частей игр, обеспечивая надежность и масштабируемость.

#Java #OffTime
Ребят создам пост в котором предлагаю делиться своими pet-проектами)

Начну эстафету с себя)
Восстановил мини консольную игру которую писал как обучающий проект)
Ссылку на гит прилагаю, вроде должно все работать))

Конечно ж интересует Ваше мнение☺️

https://github.com/Oleborn/GameTest

#Java #PetProjects
Подписывайтесь на канал, здесь Google сделал из человека программиста...)

https://t.me/Java_for_beginner_dev

#Mems
https://t.me/model3ddd/3103

Напоминаю про канал моего товарища и коллеги!)

Если интересно направление 3D, примеры работ и в целом направление - это то что Вы искали)))

#Bro
Полиморфизм

Полиморфизм (от греч. "много форм") — один из основополагающих принципов объектно-ориентированного программирования (ООП), который позволяет объектам разных классов быть обработанными единообразно. Полиморфизм позволяет использовать один интерфейс для различных типов объектов.

Типы полиморфизма:

Компиляторный полиморфизм (статический полиморфизм): Достигается за счет перегрузки методов (method overloading).
Рантайм полиморфизм (динамический полиморфизм): Достигается за счет переопределения методов (method overriding) и использования наследования и интерфейсов.


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

Пример полиморфизма:
Рассмотрим пример с суперклассом Animal и подклассами Dog и Cat.
// Суперкласс
public class Animal {
public void makeSound() {
System.out.println("Some generic animal sound");
}
}

// Подкласс
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}

// Подкласс
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Meow! Meow!");
}
}


Использование полиморфизма:

Создадим класс Main, чтобы продемонстрировать полиморфизм.
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();

myDog.makeSound(); // Выведет "Woof! Woof!"
myCat.makeSound(); // Выведет "Meow! Meow!"
}
}


Преимущества полиморфизма:

Гибкость: Позволяет обрабатывать объекты различных классов через общий интерфейс.
Расширяемость: Упрощает добавление новых классов, поскольку методы вызываются на основе общего интерфейса.
Читаемость и поддерживаемость: Уменьшает количество условных операторов, что делает код более чистым и понятным.


Полиморфизм и интерфейсы:

Полиморфизм также поддерживается через интерфейсы. Рассмотрим пример с интерфейсом Animal и классами Dog и Cat.
public interface Animal {
void makeSound();
}

public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}

public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow! Meow!");
}
}


Использование полиморфизма с интерфейсами:
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();

myDog.makeSound(); // Выведет "Woof! Woof!"
myCat.makeSound(); // Выведет "Meow! Meow!"
}
}


#Java #Training #ООП #Полиформизм
Подписывайтесь на канал, здесь мы научим Вас Ctrl+C — Ctrl+V)

https://t.me/Java_for_beginner_dev

#Mems
Что выведет код?

import java.util.*;

public class Main {
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
Collections.reverse(numbers);
numbers.removeIf(n -> n % 2 == 0);
System.out.println(numbers);
}
}


#Tasks
Варианты ответа:
Anonymous Quiz
10%
[5, 4, 3, 2, 1]
75%
[5, 3, 1]
15%
[4, 2]
0%
[1, 3, 5]
Абстрактные классы и методы

Абстрактный класс — это класс, который не может быть инстанцирован и служит для определения общей функциональности, которую подклассы должны реализовать. Абстрактный метод — это метод без реализации, который должен быть переопределен в подклассе.

Абстрактный класс определяется с помощью ключевого слова abstract.


public abstract class Animal {
protected String name;

public Animal(String name) {
this.name = name;
}

public abstract void makeSound(); // Абстрактный метод

public void eat() {
System.out.println(name + " is eating");
}
}


Подклассы абстрактного класса:

Подклассы абстрактного класса должны предоставить реализацию всех абстрактных методов суперкласса.

public class Dog extends Animal {
public Dog(String name) {
super(name);
}

@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}

public class Cat extends Animal {
public Cat(String name) {
super(name);
}

@Override
public void makeSound() {
System.out.println("Meow! Meow!");
}
}


Использование абстрактного класса:
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog("Buddy");
Animal myCat = new Cat("Whiskers");

myDog.makeSound(); // Выведет "Woof! Woof!"
myCat.makeSound(); // Выведет "Meow! Meow!"
myDog.eat(); // Выведет "Buddy is eating"
myCat.eat(); // Выведет "Whiskers is eating"
}
}


Преимущества использования абстрактных классов:

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


Разница между абстрактными классами и интерфейсами:

Множественное наследование: Класс может реализовывать несколько интерфейсов, но может наследоваться только от одного абстрактного класса.
Реализация методов: Интерфейсы не могут содержать реализацию методов (до Java 8, после появились default методы), в то время как абстрактные классы могут содержать методы с реализацией.
Использование в коде: Абстрактные классы используются для определения общего функционала с частичной реализацией, тогда как интерфейсы служат для определения контрактов без реализации.


Пример использования интерфейсов и абстрактных классов:
public interface Flyable {
void fly();
}

public abstract class Bird {
public abstract void makeSound();

public void layEggs() {
System.out.println("Laying eggs");
}
}

public class Sparrow extends Bird implements Flyable {
@Override
public void makeSound() {
System.out.println("Chirp! Chirp!");
}

@Override
public void fly() {
System.out.println("Flying high!");
}
}

public class Main {
public static void main(String[] args) {
Sparrow sparrow = new Sparrow();
sparrow.makeSound(); // Выведет "Chirp! Chirp!"
sparrow.fly(); // Выведет "Flying high!"
sparrow.layEggs(); // Выведет "Laying eggs"
}
}

#Java #Training #ООП
Интерфейсы

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

Объявление интерфейса

Интерфейс объявляется с использованием ключевого слова interface.
public interface Animal {
void makeSound(); // Метод без реализации
}


Реализация интерфейса

Класс, который реализует интерфейс, должен предоставить реализацию всех методов, объявленных в интерфейсе.
public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}

public class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow! Meow!");
}
}


Использование интерфейсов
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();

myDog.makeSound(); // Выведет "Woof! Woof!"
myCat.makeSound(); // Выведет "Meow! Meow!"
}
}


Методы по умолчанию и статические методы

С Java 8 интерфейсы могут содержать методы по умолчанию (default methods) и статические методы.
public interface Animal {
void makeSound();

default void sleep() {
System.out.println("Sleeping...");
}

static void description() {
System.out.println("Animals can make sounds.");
}
}

public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}


Использование методов по умолчанию и статических методов
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.makeSound(); // Выведет "Woof! Woof!"
myDog.sleep(); // Выведет "Sleeping..."
Animal.description(); // Выведет "Animals can make sounds."
}
}


Множественное наследование через интерфейсы

Класс может реализовывать несколько интерфейсов, что позволяет комбинировать различные типы поведения.
public interface Flyable {
void fly();
}

public interface Swimmable {
void swim();
}

public class Duck implements Animal, Flyable, Swimmable {
@Override
public void makeSound() {
System.out.println("Quack! Quack!");
}

@Override
public void fly() {
System.out.println("Flying high!");
}

@Override
public void swim() {
System.out.println("Swimming in the pond!");
}
}


Использование множественного наследования
public class Main {
public static void main(String[] args) {
Duck myDuck = new Duck();
myDuck.makeSound(); // Выведет "Quack! Quack!"
myDuck.fly(); // Выведет "Flying high!"
myDuck.swim(); // Выведет "Swimming in the pond!"
}
}


Преимущества интерфейсов:

Полная абстракция: Интерфейсы обеспечивают полную абстракцию, так как методы интерфейсов не содержат реализацию (до Java 8).
Множественное наследование: Классы могут реализовывать несколько интерфейсов, что позволяет создавать гибкие и модульные системы.
Поддержка контрактов: Интерфейсы определяют контракт, который должен быть реализован классом, что обеспечивает консистентность и предсказуемость поведения.


#Java #Training #ООП
Подписывайтесь на канал, мы знаем кто Вы на самом деле 🫵

https://t.me/Java_for_beginner_dev

#Mems
Рассмотрите следующий код. Какое значение будет напечатано в консоль при его выполнении?

public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int result = 0;
for (int i = 0; i < arr.length; i += 2) {
result += arr[i];
}
System.out.println(result);
}
}


#Tasks
Варианты ответа:
Anonymous Quiz
50%
9
19%
6
23%
15
8%
5
Различия между абстрактными классами и интерфейсами

Основные различия между абстрактными классами и интерфейсами:

Множественное наследование:

Абстрактные классы: Класс может наследовать только один абстрактный класс.
Интерфейсы: Класс может реализовывать несколько интерфейсов.


Методы с реализацией:

Абстрактные классы: Могут содержать как абстрактные методы (без реализации), так и методы с реализацией.
Интерфейсы: До Java 8 интерфейсы не могли содержать методов с реализацией. С Java 8 интерфейсы могут содержать методы по умолчанию и статические методы.


Ключевые слова:

Абстрактные классы: Определяются с использованием ключевого слова abstract.
Интерфейсы: Определяются с использованием ключевого слова interface.


Конструкторы:

Абстрактные классы: Могут иметь конструкторы.
Интерфейсы: Не могут иметь конструкторов.


Поле класса:


Абстрактные классы: Могут содержать поля (переменные экземпляра).
Интерфейсы: Могут содержать только константы (public static final поля).


Примеры для сравнения:

Абстрактный класс:
public abstract class Animal {
protected String name;

public Animal(String name) {
this.name = name;
}

public abstract void makeSound(); // Абстрактный метод

public void eat() {
System.out.println(name + " is eating");
}
}

public class Dog extends Animal {
public Dog(String name) {
super(name);
}

@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}


Интерфейс:
public interface Animal {
void makeSound(); // Метод без реализации

default void sleep() {
System.out.println("Sleeping...");
}
}

public class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}


Сравнительное использование:
public class Main {
public static void main(String[] args) {
// Абстрактный класс
Dog dog = new Dog("Buddy");
dog.makeSound(); // Выведет "Woof! Woof!"
dog.eat(); // Выведет "Buddy is eating"

// Интерфейс
Animal animal = new Dog();
animal.makeSound(); // Выведет "Woof! Woof!"
animal.sleep(); // Выведет "Sleeping..."
}
}


Когда использовать абстрактные классы и интерфейсы:

Используйте абстрактный класс, когда:

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


Используйте интерфейсы, когда:


Вам нужно определить контракт для множества несвязанных классов.
Вам нужно поддерживать множественное наследование.
Вы хотите обеспечить полную абстракцию без предоставления реализации.


#Java #Training #ООП
Небольшой разбор задачки от нашего подписчика)))

Оцените!👍
Forwarded from RomanGV
This media is not supported in your browser
VIEW IN TELEGRAM
Вот записал.. сказку на ночь)))
Сильно не пинайте, впервые такое записываю😀

Разбор той мини задачки "Шо напечатает код, который в следующем сообщении, если ввести "1abcd"?))"
#Tasks #Solution
Всем приятных выходных!

Не думаем о работе, наслаждаемся летом и солнышком🔆

Делитесь фото, как отдыхаете!😉

#Weekend
Что выведет код?

public class Main {
public static void main(String[] args) {
int x = 10;
int y = 5;
x += y; // x = x + y
y -= 3; // y = y - 3
x *= 2; // x = x * 2
y /= 2; // y = y / 2
System.out.println("x = " + x + ", y = " + y);
}
}


#Tasks