JavaRush /Blog Java /Random-PL /Przerwa kawowa #174. Różne sposoby tworzenia obiektu w Ja...

Przerwa kawowa #174. Różne sposoby tworzenia obiektu w Javie.String na Int w Javie - Jak przekonwertować ciąg na liczbę całkowitą

Opublikowano w grupie Random-PL

Różne sposoby tworzenia obiektu w Javie

Źródło: Medium W tym samouczku nauczymy się różnych sposobów tworzenia obiektu w Javie. Przerwa kawowa #174.  Różne sposoby tworzenia obiektu w Javie.String na Int w Javie - Jak przekonwertować ciąg na liczbę całkowitą - 1Obiekt Java jest instancją klasy Java. Każdy obiekt ma stan, zachowanie i identyfikator. Pola (zmienne) przechowują stan obiektu, natomiast metody (funkcje) pokazują działanie obiektu. Klasy służą jako „plany”, z których tworzone są instancje obiektów w czasie wykonywania.

Tworzenie obiektu w Javie

Tworzenie obiektów to proces przydzielania pamięci do przechowywania danych w polach klas (zwanych także zmiennymi). Proces ten jest często nazywany tworzeniem instancji klasy. Istnieją cztery różne sposoby tworzenia obiektów w Javie:
  1. używając nowego słowa kluczowego
  2. metoda nowaInstancja()
  3. metoda klonowania().
  4. deserializacja obiektu
Przyjrzyjmy się teraz szczegółowo każdej z wymienionych metod.

Słowo kluczowe nowe

Jest to najczęstszy sposób tworzenia obiektu w Javie. Słowo kluczowe new tworzy instancję klasy poprzez przydzielenie pamięci dla nowej instancji określonego typu. Po new następuje konstruktor - specjalna metoda odpowiedzialna za utworzenie obiektu i inicjalizację pól tworzonego obiektu. Obiekt jest tworzony za pomocą operatora new i inicjowany za pomocą konstruktora. Oto przykład tworzenia obiektu Java za pomocą operatora new :
Date today = new Date();
To wyrażenie generuje nowy obiekt Date ( Data jest klasą wewnątrz pakietu java.util ). Ta pojedyncza klauzula w kodzie wykonuje trzy operacje: deklarację, utworzenie instancji i inicjalizację. Date Today to deklaracja zmiennej, która informuje kompilator, że dzisiaj będzie odnosić się do obiektu typu Date . Operator new tworzy instancję klasy Date (tworząc nowy obiekt Date w pamięci), a Date() inicjuje obiekt. Rozważ poniższy przykład:
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());
    }
}
Na podstawie tego kodu tworzymy obiekt Person , używając nowego słowa kluczowego :
  • Obiekt p1 wywołuje niesparametryzowany konstruktor z wartością nazwy zmiennej ustawioną na „Michael Cole” i UID ustawionym na 101.
  • Obiekt p2 wywołuje sparametryzowany konstruktor, gdzie przekazuje do konstruktora wartość „John Bodgan” oraz 102. Wartościom tym przypisuje się następnie nazwę zmiennej i UID.

Korzystanie z metody newInstance().

Metoda newInstance() w Javie służy do dynamicznego tworzenia instancji obiektu danej klasy. Istnieją dwa standardowe zastosowania metody newInstance() :
  • metoda newInstance() z API java.lang.Class
  • metoda newInstance() z API java.lang.reflect.Constructor

Używanie funkcji newInstance() z interfejsu API klasy

Aby utworzyć obiekt klasy w czasie wykonywania, musimy wywołać metodę newInstance() z interfejsu API klasy, która zwraca obiekt tej klasy. Metoda newInstance() klasy java.lang.Class nie przyjmuje żadnych parametrów ani argumentów i można ją nazwać konstruktorem bezargumentowym dla tej klasy. Przyjrzyjmy się przykładowemu kodowi umożliwiającemu utworzenie obiektu klasy Person przy użyciu metody newInstance() klasy 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 (pełna nazwa klasy) ładuje klasę o nazwie Person , następnie newInstance() tworzy nowy obiekt typu Person i zwraca do niego referencję. Teraz, korzystając z odniesienia Person do p , możemy wywołać funkcję getters() i setter() w celu wykonania określonych działań. Proszę zanotować:
  • Zarówno Class.forName(), jak i newIstance() zgłaszają wyjątki, które należy obsłużyć za pomocą bloków try i catch lub słowa kluczowego Throw .
  • Metoda newInstance() z interfejsu API klasy jest przestarzała od wersji Java 9.

Używanie funkcji newInstance() z interfejsu API konstruktora

Metoda newInstance() klasy Constructor ( java.lang.reflect.Constructor ) jest podobna do metody newInstance() klasy Class z tą różnicą, że akceptuje parametry dla sparametryzowanych konstruktorów. Zademonstrujmy to podejście, tworząc obiekt klasy Person przy użyciu metody newInstance() klasy 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();
        }

    }
}
W powyższym kodzie najpierw musimy załadować klasę za pomocą metody Class.forName() . Następnie wywołamy metodę getConstructor() w celu dopasowania typów danych do przekazanych parametrów. Na koniec w metodzie newInstance() przekazujemy wymagany parametr ( null w przypadku braku argumentu). Metoda newInstance() zwróci nowy obiekt klasy PersonTwo poprzez wywołanie odpowiedniego konstruktora.

Korzystanie z metody clone().

Metoda clone() jest częścią klasy Object i służy do tworzenia kopii istniejącego obiektu. Tworzy obiekt klasy bez wywoływania konstruktora klasy. Aby sklonować metodę, odpowiednia klasa musi mieć zaimplementowany interfejs Cloneable , który jest interfejsem znacznika. Teraz utworzymy obiekt klasy Person , a następnie sklonujemy go do innego obiektu klasy 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();
        }

    }
}
Notatka. Sklonowany obiekt będzie odwoływał się do tego samego oryginalnego obiektu poprzez odniesienie p2 . Jednakże sklonowany obiekt będzie miał osobne przypisanie pamięci. Oznacza to, że wszelkie zmiany dokonane w obiekcie Person , do którego odwołuje się p2 , nie spowodują zmiany oryginalnego obiektu Person , do którego odwołuje się p1 . Dzieje się tak, ponieważ metoda clone() tworzy płytką kopię obiektów.

Korzystanie z deserializacji obiektu

Deserializacja obiektu to proces wyodrębniania obiektu z serii strumieni bajtów. Serializacja działa odwrotnie. Jego głównym celem jest pobranie przechowywanego obiektu z bazy danych/sieci z powrotem do pamięci. Jeśli chcemy serializować lub deserializować obiekt, musimy zaimplementować interfejs Serializable (interfejs tokena). Rozważ poniższy przykład:
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();
        }
    }
}
Tutaj najpierw serializujemy obiekt Person poprzez odwołanie p1 do pliku tekstowego. Metoda writeObject() zapisze strumień bajtów obiektu do pliku tekstowego. Następnie, korzystając z deserializacji obiektu, wyodrębniamy obiekt Person z powrotem do p2 . Podobnie metoda readObject() odczyta obiekt ze strumienia wejściowego obiektu. Na koniec wydrukujemy dane z obiektu Person na konsolę.

Wniosek

W tym artykule dowiedzieliśmy się o różnych sposobach tworzenia obiektu w Javie. Najpierw przyjrzeliśmy się tworzeniu obiektów za pomocą słowa kluczowego new , co jest najczęstszym sposobem. Następnie nauczyliśmy się metody newInstance() z klas Class i Constructor , która jest kolejnym popularnym sposobem tworzenia obiektów. Następnie użyliśmy metody clone() , która zamiast tworzyć nowy obiekt, tworzy płytką kopię istniejącego obiektu. Na koniec wykorzystaliśmy koncepcję serializacji i deserializacji obiektów do tworzenia obiektów w Javie.

String to Int w Javie - jak przekonwertować ciąg na liczbę całkowitą

Źródło: FreeCodeCamp Dzisiaj dowiesz się, jak przekonwertować ciąg znaków na liczbę całkowitą w Javie przy użyciu dwóch metod klasy Integer - parseInt() i valueOf() . Pomoże Ci to podczas wykonywania operacji matematycznych na wartości zmiennej łańcuchowej. Przerwa kawowa #174.  Różne sposoby tworzenia obiektu w Javie.String na Int w Javie — Jak przekonwertować ciąg na liczbę całkowitą — 2

Jak przekonwertować ciąg na liczbę całkowitą w Javie przy użyciu Integer.parseInt

Ta opcja zakłada, że ​​metoda parseInt() pobiera ciąg znaków do konwersji na liczbę całkowitą jako parametr:
Integer.parseInt(string_varaible)
Zanim przyjrzymy się przykładowi jego użycia, zobaczmy, co się stanie, gdy dodasz wartość ciągu znaków i liczbę całkowitą bez żadnej konwersji:
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        System.out.println(age + 20);
        // 1020
    }
}
W tym kodzie utworzyliśmy zmienną wiek z wartością ciągu „10”. Kiedy dodaliśmy liczbę 20 do wartości całkowitej, błędnie otrzymaliśmy 1020 zamiast prawidłowej odpowiedzi 30. Można to poprawić za pomocą metody 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
    }
}
Tutaj, aby przekonwertować zmienną wiek na liczbę całkowitą, przekazaliśmy ją jako parametr do metody parseInt() - Integer.parseInt(age) - i zapisaliśmy w zmiennej o nazwie age_to_int . Teraz po dodaniu do innej liczby całkowitej otrzymamy poprawny dodatek: age_to_int + 20 .

Jak przekonwertować ciąg na liczbę całkowitą w Javie przy użyciu Integer.valueOf

Metoda valueOf() działa tak samo jak metoda parseInt() . Jako parametr przyjmuje ciąg znaków, który należy przekonwertować na liczbę całkowitą. Oto przykład:
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
    }
}
W powyższym kodzie widać to samo, co w poprzedniej sekcji:
  • Przekazaliśmy ciąg jako parametr do valueOf() : Integer.valueOf(age) . Został on zapisany w zmiennej o nazwie age_to_int .
  • Następnie do utworzonej zmiennej dodaliśmy 10: age_to_int + 20 . Wynik wyniósł 30 zamiast 1020.

Wniosek

W tym artykule omówiliśmy konwersję ciągów znaków na liczby całkowite w Javie. Do konwersji ciągu znaków na liczbę całkowitą wykorzystano dwie metody klasy Integer - parseInt() i valueOf() . Miłego kodowania!
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION