Różne sposoby tworzenia obiektu w Javie
Źródło:
Medium W tym samouczku nauczymy się różnych sposobów tworzenia obiektu w Javie. Obiekt 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:
- używając nowego słowa kluczowego
- metoda nowaInstancja()
- metoda klonowania().
- 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;
}
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;
}
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;
}
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) {
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;
}
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.
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);
}
}
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);
}
}
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);
}
}
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!
GO TO FULL VERSION