ar
Feedback
Java | Фишки и трюки

Java | Фишки и трюки

الذهاب إلى القناة على Telegram

Java: примеры кода, интересные фишки и полезные трюки Купить рекламу: https://telega.in/c/java_tips_and_tricks ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna

إظهار المزيد
6 950
المشتركون
-124 ساعات
-137 أيام
+1430 أيام
أرشيف المشاركات
⌨️ Обработка исключений с помощью Try-With-Resources. Try-With-Resources - это новая конструкция языка, введенная в Java 7, которая облегчает работу с ресурсами такими как файлы или сокеты и сокращает количество кода, необходимого для обработки исключений. Вот пример использования Try-With-Resources для чтения содержимого файла:
try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
    String line;
    while ((line = reader.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}
💻В этом примере мы открываем BufferedReader внутри блока try с помощью конструктора FileReader. Затем мы можем безопасно читать файл внутри этого блока без необходимости явно закрывать ресурс. После завершения блока try автоматически вызывается метод close() объекта reader, который закрывает файл и освобождает связанные с ним ресурсы. Если возникнет исключение в блоке try, его можно будет обработать в блоке catch после завершения работы с ресурсом.

Repost from KOD
Gift
x50

جوائز السحب

50 اشتراك Telegram Premium لمدة 3 شهر

تاريخ الانتهاء

⌨️ Работа с коллекциями элементарных типов данных благодаря классам-оболочкам (Wrapper Classes)

import java.util.ArrayList;
import java.util.List;

public class WrapperExample {
    public static void main(String[] args) {
        // Создание списка оберток для целых чисел
        List<Integer> numbers = new ArrayList<>();
        numbers.add(10);
        numbers.add(20);
        numbers.add(30);

        // Использование методов класса-оболочки
        int sum = 0;
        for (int i = 0; i < numbers.size(); i++) {
            sum += numbers.get(i);
        }
        System.out.println("Сумма чисел: " + sum);
    }
}
✅ В этом примере создается список оберток numbers для целых чисел типа Integer. Затем мы добавляем в список несколько элементов и используем метод get() для получения элементов из списка. Значения оберток автоматически анбоксируются в примитивные типы данных int, и мы можем выполнять с ними операции, например, суммирование. Использование классов-оболочек позволяет работать с коллекциями элементарных типов данных и обеспечивает удобство и безопасность при работе с ними.

⌨️ Использования анонимных классов: Анонимный класс - это класс без имени, который объявляется и создается внутри другого класса или метода. Он удобен, когда требуется определить класс, который будет использоваться только один раз, и нет необходимости создавать отдельный класс.
public class Main {
    interface Greeting {
        void sayHello();
    }

    public static void main(String[] args) {
        Greeting greeting = new Greeting() {  // объявление и создание анонимного класса
            @Override
            public void sayHello() {
                System.out.println("Привет, мир!");
            }
        };

        greeting.sayHello();  // вызов метода sayHello у анонимного класса
    }
} 
✅В данном примере мы определили интерфейс Greeting, содержащий метод sayHello(). Затем, в методе main(), мы создали анонимный класс, реализующий интерфейс Greeting и переопределивший метод sayHello(). Затем мы вызываем метод sayHello() у объекта анонимного класса. 📝Таким образом, анонимные классы предоставляют удобный способ создания и использования классов "на лету", что может быть полезно, когда требуется определить классы, которые будут использоваться только в одном месте программы.

Представляем вашему вниманию Telegram-канал с уникальным увлекательным контентом для Java-разработчика 💪 Наша команда разраб
Представляем вашему вниманию Telegram-канал с уникальным увлекательным контентом для Javaазработчика 💪 Наша команда разработывает статического анализатора для Java, С#, С, С++ кода. Рассказываем о тонкостях этих языков, проверяем известные Open Source проекты и рассказываем об ошибках, которые в них кроются 🧐 Примеры Java-постов: - Немного о гигиене Java кода - Сразись с анализатором PVS-Studio в поиске ошибок в Java коде! Заглядывайте! Обещаем, скучно не будет 😉 Реклама. ООО "ПВС". ИНН 7105502635.

⌨️ Метод для глубокого копирования объектов. Это часто используется, когда нужно создать копию объекта, сохраняя его данные, но не связи с другими объектами. 📌 Вот пример метода для глубокого копирования:
import java.io.*;

public class DeepCopyExample {
    public static void main(String[] args) {
        Person person = new Person("John", 30);
        Person deepCopy = deepCopy(person);
        
        System.out.println("Original: " + person.getName() + ", " + person.getAge());
        System.out.println("Deep copy: " + deepCopy.getName() + ", " + deepCopy.getAge());
    }
    
    public static <T extends Serializable> T deepCopy(T object) {
        try {
            ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream();
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteOutputStream);
            objectOutputStream.writeObject(object);
            
            ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteOutputStream.toByteArray());
            ObjectInputStream objectInputStream = new ObjectInputStream(byteInputStream);
            T copy = (T) objectInputStream.readObject();
            
            return copy;
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        }
    }
}

class Person implements Serializable {
    private String name;
    private int age;
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
}
✅ В этом примере мы создаем класс Person, который реализует интерфейс Serializable, чтобы объекты этого класса можно было сериализовать и десериализовать. Затем мы создаем метод deepCopy, который принимает объект и возвращает его глубокую копию. Мы используем ByteArrayOutputStream и ObjectOutputStream, чтобы записать объект в байтовый массив, а затем ByteArrayInputStream и ObjectInputStream, чтобы прочитать копию объекта из массива. В методе main мы создаем объект Person, затем создаем его глубокую копию с помощью метода deepCopy и выводим на экран значения оригинального и скопированного объекта.

⌨️ Использование интерфейса Callable вместе с классом Future для выполнения асинхронных задач и получения их результата:

import java.util.concurrent.*;

public class Main {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newFixedThreadPool(1);

        Future<Integer> futureResult = executor.submit(new Callable<Integer>() {
            @Override
            public Integer call() throws Exception {
                // Выполнение сложной вычислительной задачи
                int result = 0;
                for (int i = 0; i < 100; i++) {
                    result += i;
                    Thread.sleep(100);
                }
                return result;
            }
        });

        // Другие действия, выполняемые параллельно

        try {
            // Ожидание завершения асинхронной задачи и получение результата
            Integer result = futureResult.get();
            System.out.println("Результат: " + result);
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        executor.shutdown();
    }
}
➡️В данном примере создается пул потоков размером 1, затем создается асинхронная задача с использованием интерфейса Callable, который возвращает результат типа Integer. Задача выполняет сложное вычисление с задержкой в 100 миллисекунд каждую итерацию. После создания задачи, она отправляется на выполнение в пул потоков. Далее, можно выполнять другие действия параллельно с ожиданием завершения задачи. Метод get() вызывается для ожидания завершения задачи и получения результата. Если задача еще не завершилась, вызов этого метода блокируется. Возможны исключения, такие как InterruptedException или ExecutionException, которые необходимо обработать. 💁‍♂️ Затем поток пул завершается вызовом shutdown().

Самый необычный канал про Java, подписывайся – https://t.me/java_secrets 📲 Будь в курсе последних тенденций, лучших практик
Самый необычный канал про Java, подписывайся – https://t.me/java_secrets 📲 Будь в курсе последних тенденций, лучших практик и отраслевых секретов Java. Канал Секреты Java поможет тебе улучшить свой путь разработки Java.

Did anyone say Java?
Did anyone say Java?

⌨️ Параллельное выполнение задач с использованием ExecutorService ExecutorService - это интерфейс, который предоставляет удобный способ для управления параллельным выполнением задач. Он предоставляет пул потоков для выполнения задач и управляет их жизненным циклом:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
    public static void main(String[] args) {
        // Создание пула потоков
        ExecutorService executor = Executors.newFixedThreadPool(5);

        // Подача задач на выполнение
        for (int i = 0; i < 10; i++) {
            executor.execute(new Task(i));
        }

        // Остановка пула потоков после выполнения задач
        executor.shutdown();
    }

    static class Task implements Runnable {
        private int taskId;

        public Task(int taskId) {
            this.taskId = taskId;
        }

        @Override
        public void run() {
            System.out.println("Выполнение задачи " + taskId + " в потоке " +
                Thread.currentThread().getName());
        }
    }
}
🧑‍💻Этот код создает пул из 5 потоков и подает на выполнение 10 задач. Каждая задача выводит свой идентификатор и имя потока, в котором она выполняется. После выполнения всех задач пул потоков останавливается.

Ответ на вопрос и Яндекс Музыка ваша 60 дней бесплатно Яндекс Музыка для вас и 3-х ваших близких 60 дней бесплатно. Попробуйт
Ответ на вопрос и Яндекс Музыка ваша 60 дней бесплатно Яндекс Музыка для вас и 3-х ваших близких 60 дней бесплатно. Попробуйте сейчас! Попробовать #реклама 16+ music.yandex.ru О рекламодателе

💻 Как полезную фишку на Java можно рассмотреть использование лямбда-выражений для упрощения написания анонимных классов. Например, использование лямбда-выражения для выполнения операции над элементами коллекции:
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // Использование лямбда-выражения для вывода каждого элемента в консоль
        numbers.forEach(n -> System.out.println(n));

        // Использование лямбда-выражения для умножения каждого элемента на 2
        numbers.replaceAll(n -> n * 2);
        System.out.println(numbers); // Вывод: [2, 4, 6, 8, 10]
    }
}
🔝 Использование лямбда-выражений делает код более компактным и удобочитаемым, особенно при работе с коллекциями и функциональными интерфейсами.

Ответьте на 1 вопрос и книги ваши на 30 дней за 0 рублей Доступ к Букмейту для вас и трех ваших близких на 30 дней бесплатно. Попробуйте! Получить предложение #реклама 16+ mrqz.me О рекламодателе

⌨️ Использование StringBuilder для эффективной конкатенации строк:
public class StringBuilderExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; i++) {
            sb.append("строка ").append(i).append("\n");
        }
        String result = sb.toString();
        System.out.println(result);
    }
}
📌 В этом примере используется StringBuilder для объединения 10 строк "строка i" в одну строку. Это более эффективно, чем использование оператора "+" или String.concat(), особенно при большом количестве операций конкатенации строк. StringBuilder предоставляет изменяемую последовательность символов и позволяет выполнять эффективные операции вставки, удаления и конкатенации строк.

Ответьте на 1 вопрос и книги ваши на 30 дней за 0 рублей Более 200 000 книг и аудиокниг разных жанров в Букмейте. Попробуйте бесплатно! Попробовать #реклама 16+ bookmate.ru О рекламодателе

⌨️ Использование интерфейсов для множественного наследования
// Создание интерфейсов
interface Printable {
    void print();
}

interface Showable {
    void show();
}

// Реализация интерфейсов в классе
class MyClass implements Printable, Showable {
    public void print() {
        System.out.println("Printing...");
    }

    public void show() {
        System.out.println("Showing...");
    }
}

public class Main {
    public static void main(String[] args) {
        // Создание объекта класса MyClass
        MyClass obj = new MyClass();
        obj.print();
        obj.show();
    }
}
🔎 В данном коде используются интерфейсы для реализации множественного наследования. Класс MyClass реализует два интерфейса Printable и Showable, и поэтому класс может использовать методы, определенные в обоих интерфейсах. Это позволяет создавать гибкие и модульные программы, используя механизм интерфейсов в Java.

⌨️ Фишка: Создание итератора для пользовательского класса. Код:
import java.util.Iterator;

public class CustomClass implements Iterable<String> {
    private String[] elements;

    public CustomClass(String[] elements) {
        this.elements = elements;
    }

    @Override
    public Iterator<String> iterator() {
        return new CustomIterator();
    }

    private class CustomIterator implements Iterator<String> {
        private int index = 0;

        @Override
        public boolean hasNext() {
            return index < elements.length;
        }

        @Override
        public String next() {
            if (this.hasNext()) {
                return elements[index++];
            } else {
                throw new NoSuchElementException();
            }
        }
    }

    public static void main(String[] args) {
        String[] arr = {"one", "two", "three"};
        CustomClass customClass = new CustomClass(arr);
        
        for (String element : customClass) {
            System.out.println(element);
        }
    }
}
💁‍♂️ Этот код позволяет создать итератор для пользовательского класса CustomClass. Итератор позволяет перебирать элементы массива elements и использовать их в цикле for-each.

Апартаменты YE’S Primorsky в Санкт-Петербурге В проекте представлены апартаменты площадью от 21 до 128 кв.м. Все юниты в комплексе YE’S сдаются с высококлассной авторской отделкой. Дополнительно возможно приобретение мебели и бытовой техники от известных производителей. Для удобства проживания во всех апартаментах предусмотрена кухонная зона. Особенностью проекта является наличие уникальных двухуровневых апартаментов Penthouse Terrace с панорамными окнами, из которых открывается великолепный вид на город. Забронировать #реклама yesprimorsky.ru О рекламодателе

Array vs ArrayList Выбор между Array и ArrayList зависит от специфики задачи на Java, которую требуется решить. 📌Помните о следующих особенностях этих типов: • Array имеет фиксированный размер и память для него выделяется в момент объявления, а размер ArrayLists может динамически изменяться. • Массивы Java работают гораздо быстрее, а в ArrayList намного проще добавлять/удалять элементы. • При работе с Array велика вероятность получить ошибку ArrayIndexOutOfBoundsException. • У ArrayList только одно измерение, а вот массивы Java могут быть многомерными.
import java.util.ArrayList;

public class arrayVsArrayList {

  public static void main(String[] args) {

    // объявление Array
    int[] myArray = new int[6];

    // обращение к несуществующему индексу
    myArray[7]= 10; // ArrayIndexOutOfBoundsException

    // объявление ArrayList
    ArrayList<Integer> myArrayList = new ArrayList<>();

    // простое добавление и удаление элементов
    myArrayList.add(1);
    myArrayList.add(2);
    myArrayList.add(3);
    myArrayList.add(4);
    myArrayList.add(5);
    myArrayList.remove(0);

    // получение элементов ArrayList    
    for(int i = 0; i < myArrayList.size(); i++) {
      System.out.println("Element: " + myArrayList.get(i));
    }
  
    // многомерный Array
      int[][][] multiArray = new int [3][3][3]; 
    }
}

Присоединяйтесь к нашему бесплатному курсу и начните увлекательное путешествие в мир Java! Изучайте основы, создавайте програ
Присоединяйтесь к нашему бесплатному курсу и начните увлекательное путешествие в мир Java! Изучайте основы, создавайте программы, разбирайтесь с методами и анализируйте ошибки в коде. Практика, упражнения и проверочные тесты помогут вам освоить навыки программирования. 🎓 Чему вы научитесь: — Создавать программы с использованием основных конструкций языка.  — Разделять код на методы для повторного использования.  — Анализировать ошибки в коде с использованием отладочной печати. 💼 Включено в курс: 29 уроков (видео и/или текст), 35 упражнений в тренажере, 95 проверочных тестов + дополнительные материалы. Вы с нами?😉 Реклама. АНПОО "ХЕКСЛЕТ КОЛЛЕДЖ". ИНН 7839056670.