JavaRush /Java блог /Random /Кофе-брейк #174. Различные способы создания объекта в Jav...

Кофе-брейк #174. Различные способы создания объекта в Java.String в Int на Java — как преобразовать строку в целое число

Статья из группы Random

Различные способы создания объекта в 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 в текстовый файл. Метод 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(). Удачного кодирования!
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ