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

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

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
По-моему мало одного? 💪😋

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
Получение информации о полях. Часть 2

Пример получения информации о полях

Рассмотрим более сложный пример, где мы получаем информацию о всех полях класса, включая их типы и модификаторы.
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

class Example {
public String publicField = "Public Field";
private int privateField = 42;
protected static final double PROTECTED_FIELD = 3.14;
}

public class Main {
public static void main(String[] args) throws Exception {
Class<?> clazz = Example.class;

// Получаем все поля (публичные и унаследованные)
Field[] fields = clazz.getFields();
System.out.println("Public Fields:");
for (Field field : fields) {
System.out.println(" Name: " + field.getName());
System.out.println(" Type: " + field.getType().getName());
System.out.println(" Modifiers: " + Modifier.toString(field.getModifiers()));
}

// Получаем все объявленные поля (включая приватные и защищенные)
Field[] declaredFields = clazz.getDeclaredFields();
System.out.println("Declared Fields:");
for (Field field : declaredFields) {
System.out.println(" Name: " + field.getName());
System.out.println(" Type: " + field.getType().getName());
System.out.println(" Modifiers: " + Modifier.toString(field.getModifiers()));
}
}
}


Вывод программы
Public Fields:
Name: publicField
Type: java.lang.String
Modifiers: public
Declared Fields:
Name: publicField
Type: java.lang.String
Modifiers: public
Name: privateField
Type: int
Modifiers: private
Name: PROTECTED_FIELD
Type: double
Modifiers: protected static final


Нюансы использования

Доступ к приватным полям:
По умолчанию приватные поля недоступны через getFields(). Для доступа к ним нужно использовать getDeclaredFields() и вызвать метод setAccessible(true).

Пример:
Field privateField = clazz.getDeclaredField("privateField");
privateField.setAccessible(true); // Разрешаем доступ к приватному полю
System.out.println("Private Field Value: " + privateField.get(new Example())); // Вывод: 42


Статические поля:

Для получения значения статического поля можно передать null в метод get().

Пример:
Field staticField = clazz.getDeclaredField("PROTECTED_FIELD");
staticField.setAccessible(true);
System.out.println("Static Field Value: " + staticField.get(null)); // Вывод: 3.14


#Java #Training #Medium #Reflection_API #Field
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Получение информации о методах.

Класс Method в Java является частью Reflection API и представляет собой метаинформацию о методах класса. С помощью этого класса можно получить информацию о методах, их параметрах, возвращаемых типах и аннотациях.

Что такое метод класса и как его получить

Метод класса — это блок кода, который выполняет определенную задачу.

В Java методы могут быть:
Публичными (public): доступны из любого класса.
Приватными (private): доступны только внутри класса.
Защищенными (protected): доступны внутри класса и его подклассов.
По умолчанию (без модификатора): доступны внутри пакета.


Для получения методов класса используются методы:

getMethods()
Возвращает массив всех публичных методов класса, включая унаследованные от суперклассов и интерфейсов.

Пример:
Class<?> clazz = String.class;
Method[] methods = clazz.getMethods();
for (Method method : methods) {
System.out.println(method.getName());
}


getDeclaredMethods()
Возвращает массив всех методов, объявленных в классе (включая приватные и защищенные), но не включает унаследованные методы.

Пример:
Method[] declaredMethods = clazz.getDeclaredMethods();
for (Method method : declaredMethods) {
System.out.println(method.getName());
}


Пример получения методов класса
import java.lang.reflect.Method;

public class Main {
public static void main(String[] args) {
Class<?> clazz = String.class;

// Получение всех публичных методов
System.out.println("Public Methods:");
Method[] methods = clazz.getMethods();
for (Method method : methods) {
System.out.println(method.getName());
}

// Получение всех объявленных методов
System.out.println("\nDeclared Methods:");
Method[] declaredMethods = clazz.getDeclaredMethods();
for (Method method : declaredMethods) {
System.out.println(method.getName());
}
}
}


#Java #Training #Medium #Reflection_API #Method
Что выведет код?

abstract class Shape {
abstract void draw();
}

class Circle extends Shape {
void draw() {
System.out.println("Drawing Circle");
}
}

class Square extends Shape {
void draw() {
System.out.println("Drawing Square");
}
}

public class Task070225 {
public static void main(String[] args) {
Shape shape = new Circle();
shape.draw();
shape = new Square();
shape.draw();
shape = null;
shape.draw();
}
}


#Tasks
Тут на неделю работы? 😱 😕

https://t.me/Java_for_beginner_dev

#Mems
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩‍💻

Какой тип данных используется для хранения целых чисел?
Anonymous Quiz
4%
float
94%
int
0%
double
2%
char
Получение информации о методах.

Работа с параметрами методов

getParameterTypes()
Возвращает массив Class объектов, представляющих типы параметров метода.

Пример:
Class<?> clazz = String.class;
Method method = clazz.getMethod("substring", int.class, int.class);
Class<?>[] parameterTypes = method.getParameterTypes();
for (Class<?> paramType : parameterTypes) {
System.out.println(paramType.getName()); // Вывод: int, int
}


getReturnType()
Возвращает Class объект, представляющий тип возвращаемого значения метода.

Пример:
Class<?> returnType = method.getReturnType();
System.out.println(returnType.getName()); // Вывод: java.lang.String


Пример получения информации о параметрах и возвращаемом типе
import java.lang.reflect.Method;

public class Main {
public static void main(String[] args) throws NoSuchMethodException {
Class<?> clazz = String.class;

// Получение метода substring(int, int)
Method method = clazz.getMethod("substring", int.class, int.class);

// Получение типов параметров
System.out.println("Parameter Types:");
Class<?>[] parameterTypes = method.getParameterTypes();
for (Class<?> paramType : parameterTypes) {
System.out.println(paramType.getName());
}

// Получение возвращаемого типа
System.out.println("\nReturn Type:");
Class<?> returnType = method.getReturnType();
System.out.println(returnType.getName());
}
}


Пример с приватным методом
import java.lang.reflect.Method;

class MyClass {
private void myPrivateMethod(int a, String b) {
System.out.println("Private Method: " + a + ", " + b);
}
}

public class Main {
public static void main(String[] args) throws NoSuchMethodException {
Class<?> clazz = MyClass.class;

// Получение приватного метода
Method method = clazz.getDeclaredMethod("myPrivateMethod", int.class, String.class);

// Получение типов параметров
System.out.println("Parameter Types:");
Class<?>[] parameterTypes = method.getParameterTypes();
for (Class<?> paramType : parameterTypes) {
System.out.println(paramType.getName()); // Вывод: int, java.lang.String
}

// Получение возвращаемого типа
System.out.println("\nReturn Type:");
Class<?> returnType = method.getReturnType();
System.out.println(returnType.getName()); // Вывод: void
}
}


#Java #Training #Medium #Reflection_API #Method
Всем добрейшего субботнего утра! 🔆

Ну как, настроены на выходные?

Очень хотел продолжить запись по созданию сервиса на неделе, но что-то много задач по работе навалилось и теперь только завтра 😉

Так что жду 😏
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Всем привет!

Сегодня в 16:00 по МСК вновь жду Вас на встречу, где мы продолжим писать сервис доставки товаров!) 😮

Приходите! ✌️
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring.
Пишем сервис доставки. Встречи от 02 и 09.01.2025

Запись встречи -
YOUTUBE
RUTUBE

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

Пригодится тем кто хочет написать что-то подобное сам и готов посидеть, посмотреть на процесс написания, построения логики и размышления))

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


Смотрите, комментируйте, задавайте вопросы! Обязательно подписывайтесь на ютуб и рутюб каналы!!!

Всем хорошего настроения и терпения при просмотре! 🍸
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, который вызывается при создании объекта класса. Он используется для инициализации объекта, установки начальных значений полей и выполнения других подготовительных действий. Конструктор имеет то же имя, что и класс, и не имеет возвращаемого типа.

Пример простого конструктора:
public class Person {
private String name;
private int age;

// Конструктор
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}


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


Для работы с конструкторами используется класс java.lang.reflect.Constructor. Мы можем получить все конструкторы класса или конкретный конструктор с определенными параметрами.

Методы для получения конструкторов

getConstructors()
Этот метод возвращает массив всех публичных конструкторов класса. Конструкторы, объявленные с модификатором доступа private, protected или без модификатора (package-private), не будут включены в результат.

Пример:
import java.lang.reflect.Constructor;

public class Main {
public static void main(String[] args) {
try {
// Получаем класс Person
Class<?> personClass = Class.forName("Person");

// Получаем все публичные конструкторы
Constructor<?>[] publicConstructors = personClass.getConstructors();

// Выводим информацию о конструкторах
for (Constructor<?> constructor : publicConstructors) {
System.out.println("Constructor: " + constructor);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}


Вывод:
Constructor: public Person(java.lang.String,int)


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


Минусы:
Не возвращает приватные или защищенные конструкторы.

getDeclaredConstructors()
Этот метод возвращает массив всех конструкторов класса, включая приватные, защищенные и package-private. В отличие от getConstructors(), этот метод позволяет получить доступ ко всем конструкторам, независимо от их модификатора доступа.

Пример:
import java.lang.reflect.Constructor;

public class Main {
public static void main(String[] args) {
try {
// Получаем класс Person
Class<?> personClass = Class.forName("Person");

// Получаем все конструкторы (включая приватные)
Constructor<?>[] allConstructors = personClass.getDeclaredConstructors();

// Выводим информацию о конструкторах
for (Constructor<?> constructor : allConstructors) {
System.out.println("Constructor: " + constructor);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}


Вывод:
Constructor: public Person(java.lang.String,int)
Constructor: private Person()


Плюсы:
Возвращает все конструкторы, включая приватные.
Полезен для глубокого анализа класса.


Минусы:
Может потребовать дополнительных действий для работы с приватными конструкторами (например, вызов setAccessible(true)).

Нюансы использования
Доступ к приватным конструкторам: Если вы хотите использовать приватный конструктор, вам нужно вызвать метод setAccessible(true) на объекте Constructor, чтобы обойти проверку доступа.
Безопасность: Использование рефлексии может нарушить инкапсуляцию, поэтому будьте осторожны при работе с приватными конструкторами.

#Java #Training #Medium #Reflection_API #Constructor
Что выведет код?

public class Task100225 {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
if (i == 6) {
continue;
}
System.out.print(i + " ");
}
}
}


#Tasks