JavaRush /Java блог /Random UA /Кава-брейк #174. Різні способи створення об'єкта в Java.S...

Кава-брейк #174. Різні способи створення об'єкта в Java.String в Int на Java - як перетворити рядок на ціле число

Стаття з групи Random UA

Різні способи створення об'єкта в Java

Джерело: Medium У цьому посібнику ми вивчимо різні способи створення об'єкта в Java. Кава-брейк #174.  Різні способи створення об'єкта в Java.String в Int на Java - як перетворити рядок на ціле число - 1Об'єкт Java – це екземпляр класу Java. Кожен об'єкт має стан, поведінку та ідентифікатор. Поля (змінні) зберігають стан об'єкта, тоді як методи (функції) демонструють дію об'єкта. Класи служать “кресленнями”, у тому числі під час виконання створюються екземпляри об'єктів.

Створення об'єкта в Java

Створення об'єкта - це процес виділення пам'яті для зберігання даних у полях класу (також званих змінними). Цей процес часто називають створенням екземпляра класу. У Java існує чотири різні способи створення об'єктів:
  1. за допомогою ключового слова new
  2. методом newInstance()
  3. методом clone()
  4. десеріалізацією об'єкта
Зараз докладно розглянемо кожен із згаданих способів.

Ключове слово new

Це найбільш поширений спосіб створення об'єкта Java. Ключове слово New створює екземпляр класу, виділяючи пам'ять для нового екземпляра зазначеного типу. Після new йде конструктор - спеціальний метод, що відповідає за створення об'єкта та ініціалізацію полів об'єкта, що створюється. Об'єкт створюється оператором new та ініціалізується конструктором. Перед вами приклад створення об'єкта Java з оператором new :
Date today = new Date();
Цей вираз генерує новий об'єкт Date ( Date – це клас усередині пакету java.util ). Ця єдина пропозиція у коді виконує три операції: оголошення, інстанціювання та ініціалізацію. Date today - це оголошення змінної, яке інформує компілятор про те, що today буде посилатися на об'єкт типу Date . Оператор new створює екземпляр класу Date (створюючи у своїй новий об'єкт Date у пам'яті), а Date() ініціалізує об'єкт. Розглянемо приклад, наведений нижче:
public class Person {
    private String name;
    private int uid;

    public Person() {
        this.name = "Michael Cole";
        this.uid = 101;
    }

    public Person(String name, int uid) {
        super();
        this.name = name;
        this.uid = uid;
    }

    // getters and setters...

    public static void main(String[] args) {

        Person p1 = new Person();
        Person p2 = new Person("John Bodgan", 102);
        System.out.println("Name: " + p1.getName() + " UID: " + p1.getUid());
        System.out.println("Name: " + p2.getName() + " UID: " + p2.getUid());
    }
}
З цього коду ми створюємо об'єкт Person , використовуючи ключове слово new :
  • Об'єкт p1 викликає непараметризованний конструктор, у якому значення імені змінної встановлено "Michael Cole", а UID - на 101.
  • Об'єкт p2 викликає параметризований конструктор, де він передає конструктору значення John Bodgan і 102. Потім цим значенням присвоюються ім'я змінної і UID.

Використання методу newInstance()

Метод newInstance() Java використовується для динамічного створення екземпляра об'єкта даного класу. Існує два стандартні варіанти використання методу newInstance() :
  • Метод newInstance() з API java.lang.Class
  • Метод newInstance() з API java.lang.reflect.Constructor

Використання newInstance() з Class API

Щоб створити об'єкт класу під час виконання, необхідно викликати метод newInstance() з Class API, який повертає об'єкт цього класу. Метод newInstance() класу java.lang.Class не враховує жодних параметрів чи аргументів і може називатися конструктором без аргументів цього класу. Розглянемо приклад коду для створення об'єкта класу Person з використанням методу newInstance() класу java.lang.Class :
public class Person {
    private String name;
    private int uid;

    public Person() {
        this.name = "Carl Max";
        this.uid = 101;
    }

   // getters and setters...
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class c = Class.forName("com.medium.option2.Person");
        @SuppressWarnings("deprecation")
        Person p = (Person) c.newInstance();
        System.out.println("Name: " + p.getName());
        System.out.println("UID: " + p.getUid());
    }
}
Class.forName (повне ім'я класу) завантажує клас з ім'ям Person , а потім newInstance() створює новий об'єкт типу Person і повертає посилання на нього. Тепер, використовуючи посилання Person на p ми можемо викликати її getters() і setter() для виконання певних дій. Будь ласка, зверніть увагу:
  • І Class.forName() , і newIstance() генерують винятки, які необхідно обробляти за допомогою блоків try і catch , або за допомогою ключового слова throws .
  • Метод newInstance() із Class API застарів, починаючи з версії Java 9.

Використання newInstance() з Constructor API

Метод newInstance() класу Constructor ( java.lang.reflect.Constructor ) аналогічний методу newInstance() класу Class , за винятком того, що він приймає параметри для параметризованих конструкторів. Давайте продемонструємо цей підхід, створивши об'єкт класу Person за допомогою методу newInstance() класу java.lang.reflect.Constructor :
public class PersonTwo {
    private String name;
    private int uid;

    public PersonTwo() {
        this.name = "Maya Kumari";
        this.uid = 101;
    }

    public PersonTwo(String name) {
        this.name = name;
        this.uid = 102;
    }

    public PersonTwo(String name, Integer uid) {
        this.name = name;
        this.uid = uid;
    }

    // getters and setters...
    public static void main(String[] args) {
        try {
            Class.forName("com.medium.option2.PersonTwo");

            Constructor c1 = PersonTwo.class.getConstructor();
            PersonTwo p1 = (PersonTwo) c1.newInstance();
            System.out.println("Name: " + p1.getName());
            System.out.println("UID: " + p1.getUid());

            Constructor c2 = PersonTwo.class.getConstructor(String.class);
            PersonTwo p2 = (PersonTwo) c2.newInstance("James Gunn");
            System.out.println("Name: " + p2.getName());
            System.out.println("UID: " + p2.getUid());

            Constructor c3 = PersonTwo.class.getConstructor(String.class, Integer.class);
            PersonTwo p3 = (PersonTwo) c3.newInstance("Mark Brown", 103);
            System.out.println("Name: " + p3.getName());
            System.out.println("UID: " + p3.getUid());

        } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
У наведеному вище коді спочатку потрібно завантажити клас, використовуючи метод Class.forName() . Далі ми викличемо метод getConstructor() для зіставлення типів даних параметрів, що передаються. Нарешті, у методі newInstance() ми передаємо необхідний параметр ( null у разі відсутності аргументу). Метод newInstance() поверне новий об'єкт класу PersonTwo , викликавши відповідний конструктор.

Використання методу clone()

Метод clone() є частиною класу Object і використовується для створення копії наявного об'єкта. Він створює об'єкт класу без виклику будь-якого конструктора класу. Щоб клонувати метод, відповідний клас повинен мати реалізований Cloneable інтерфейс , який є інтерфейсом маркера. Зараз ми створимо об'єкт класу Person , а потім клонуємо його в інший об'єкт класу Person :
public class Person implements Cloneable {
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    private String name;
    private int uid;

    public Person(String name, int uid) {
        super();
        this.name = name;
        this.uid = uid;
    }

    // getters and setters...

    public static void main(String[] args) {
        Person p1 = new Person("Ryan", 101);
        try {
            Person p2 = (Person) p1.clone();
            System.out.println("Name: " + p2.getName());
            System.out.println("UID: " + p2.getUid());
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }

    }
}
Примітка. Клонований об'єкт буде посилатися на той самий вихідний об'єкт через посилання p2 . Однак, клонований об'єкт матиме окреме призначення пам'яті. Це означає, що будь-які зміни, зроблені в об'єкті Person за посиланням p2 , не змінять вихідний об'єкт Person , на який посилається посилання p1 . Це з тим, що метод clone() створює поверхневу копію об'єктів.

Використання десеріалізації об'єктів

Десеріалізація об'єкта – це процес вилучення об'єкта із серії потоків байтів. Серіалізація робить протилежне. Його основна мета - вийняти збережений об'єкт із бази даних/мережі назад на згадку. Якщо ми хочемо серіалізувати чи десеріалізувати об'єкт, нам необхідно реалізувати інтерфейс Serializable (інтерфейс маркера). Розглянемо приклад, наведений нижче:
public class PersonDriver {

    public static void main(String[] args) {
        Person p1 = new Person("Max Payne", 101);
        FileOutputStream fileOutputStream;
        try {
            fileOutputStream = new FileOutputStream("link to text file");
            ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream);
            outputStream.writeObject(p1);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        FileInputStream fileInputStream;
        try {
            fileInputStream = new FileInputStream("link to text file");
            ObjectInputStream inputStream = new ObjectInputStream(fileInputStream);
            Person p2 = (Person) inputStream.readObject();
            System.out.println("Name: " + p2.getName());
            System.out.println("UID: " + p2.getUid());
            inputStream.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
Тут ми спочатку серіалізуємо об'єкт Person за посиланням p1 у текстовий файл. p align="justify" > Метод writeObject() запише потік байтів об'єкта в текстовий файл. Потім, використовуючи десеріалізацію об'єкта, ми виймаємо об'єкт Person назад у p2 . Так само метод readObject() буде зчитувати об'єкт із потоку введення об'єкта. Нарешті ми виведемо дані з об'єкта Person у консоль.

Висновок

У цій статті ми дізналися про різні способи створення об'єкта Java. По-перше, ми розглянули створення об'єктів з використанням ключового слова new , яке є найпоширенішим способом. Потім ми вивчабо метод newInstance() класів Class і Constructor , який є ще одним популярним способом створення об'єктів. Потім ми використовували метод clone() , який створює поверхневу копію наявного об'єкта замість створення нового об'єкта. І, нарешті, ми використали концепцію серіалізації та десеріалізації об'єктів для створення об'єктів у Java.

String в Int на Java - як перетворити рядок на ціле число

Джерело: FreeCodeCamp Сьогодні ви дізнаєтеся, як перетворити рядок на ціле число Java за допомогою двох методів класу IntegerparseInt() і valueOf() . Це допоможе вам при виконанні математичних операцій із використанням значення рядкової змінної. Кава-брейк #174.  Різні способи створення об'єкта в Java.String в Int на Java - як перетворити рядок на ціле число - 2

Як перетворити рядок на ціле число в Java за допомогою Integer.parseInt

Цей варіант передбачає, що метод parseInt() бере рядок для перетворення на ціле число (integer) як параметр:
Integer.parseInt(string_varaible)
Перш ніж розглядати приклад його використання, давайте подивимося, що відбувається, коли ви додаєте рядкове значення та ціле число без будь-якого перетворення:
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        System.out.println(age + 20);
        // 1020
    }
}
У цьому коді ми створабо змінну age зі строковим значенням “10”. При додаванні до цілого значення (integer value) числа 20 ми помилково отримали 1020 замість правильної відповіді 30. Виправити це можна, використовуючи метод parseInt() :
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        int age_to_int = Integer.parseInt(age);

        System.out.println(age_to_int + 20);
        // 30
    }
}
Тут, щоб перетворити змінну age на ціле число, ми передали її як параметр методу parseInt()Integer.parseInt(age) — і зберегли змінну з ім'ям age_to_int . Тепер при додаванні до іншого цілого числа ми отримали правильне додавання: age_to_int + 20 .

Як перетворити рядок на ціле число в Java за допомогою Integer.valueOf

Метод valueOf() працює так само, як метод parseInt() . Як параметр він приймає рядок, який потрібно перетворити на ціле число. Ось приклад:
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        int age_to_int = Integer.valueOf(age);

        System.out.println(age_to_int + 20);
        // 30
    }
}
У наведеному вище коді можна побачити те саме, що в попередньому розділі:
  • Ми передали рядок як параметр valueOf() : Integer.valueOf(age) . Він був збережений у змінній з ім'ям age_to_int .
  • Потім додали 10 до створеної змінної: age_to_int + 20 . В результаті вийшло 30 замість 1020.

Висновок

У цій статті ми обговорабо перетворення рядків у цілі числа мовою Java. Для перетворення рядка на ціле число використовувалися два методи класу IntegerparseInt() та valueOf() . Вдалого кодування!
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ