W Javie klasy i obiekty stanowią podstawę programowania obiektowego (OOP). Pomagają modelować byty ze świata rzeczywistego i organizować kod w uporządkowany sposób.
- Klasa to plan używany do tworzenia obiektów o wspólnych właściwościach i zachowaniu.
- Obiekt jest instancją klasy. Reprezentuje konkretną jednostkę utworzoną na podstawie szablonu klasy.
Na przykład Pies jest klasą. Tommy jest obiektem tej klasy.
Klasy i obiekty (tutaj pies jest klasą, a Bobby jest obiektem)Klasa Java
Klasa to plan definiujący dane i zachowanie obiektów. Grupuje powiązane pola i metody w jedną jednostkę. Pamięć dla jej członków jest przydzielana tylko podczas tworzenia obiektu.
- Działa jako szablon do tworzenia obiektów o wspólnej strukturze.
- Nie zajmuje pamięci dla pól do momentu utworzenia instancji.
- Może zawierać pola, metody, konstruktory, zagnieżdżone klasy i interfejsy.
class Student { int id; String n; public Student(int id String n) { this.id = id; this.n = n; } } public class Main { public static void main(String[] args) { Student s1 = new Student(10 'Alice'); System.out.println(s1.id); System.out.println(s1.n); } }
Wyjście
10 Alice
Obiekty Java
Obiekt to instancja klasy utworzona w celu uzyskania dostępu do jej danych i operacji. Każdy obiekt utrzymuje swój własny stan.
- Państwo : Wartości przechowywane w polach.
- Zachowanie : Akcje definiowane za pomocą metod.
- Tożsamość : Odróżnia jeden obiekt od drugiego.
Obiekty odzwierciedlają przedmioty ze świata rzeczywistego, takie jak produkt klienta lub krąg. Obiekty nieprymitywne są przechowywane na stercie, podczas gdy ich odniesienia pozostają na stosie.
Obiekty Java (przykład psów)Instancja obiektu
Tworzenie obiektu nazywa się tworzeniem instancji. Wszystkie instancje klasy mają wspólną strukturę i zachowanie, przechowując różne wartości stanu.
Deklaracja obiektu JavaDeklaracja:
tuf dla psa;
To tylko deklaruje odniesienie. Obiekt nie został utworzony, a odwołanie ma wartość null.
Inicjalizacja:
tuffy = nowy Pies('Tuffy' 'Papillon' 5 'Biały');
InicjalizacjaOperator new przydziela pamięć i wywołuje konstruktor.
Przykład: definiowanie i używanie klasy
Javapublic class Dog { String name; String breed; int age; String color; public Dog(String name String breed int age String color) { this.name = name; this.breed = breed; this.age = age; this.color = color; } public String getName() { return name; } public String getBreed() { return breed; } public int getAge() { return age; } public String getColor() { return color; } @Override public String toString() { return 'Name is: ' + name + 'nBreed age and color are: ' + breed + ' ' + age + ' ' + color; } public static void main(String[] args) { Dog tuffy = new Dog('tuffy' 'papillon' 5 'white'); System.out.println(tuffy); } }
Wyjście
Name is: tuffy Breed age and color are: papillon 5 white
Notatka: Każda klasa ma co najmniej jednego konstruktora. Jeśli żaden nie jest zdefiniowany, Java udostępnia domyślny konstruktor bezargumentowy, który wywołuje konstruktor nadrzędny.
Zainicjuj obiekt za pomocą metody/funkcji
Javapublic class Geeks { static String name; static float price; static void set(String n float p) { name = n; price = p; } static void get() { System.out.println('Software name is: ' + name); System.out.println('Software price is: ' + price); } public static void main(String[] args) { Geeks.set('Visual Studio' 0.0f); Geeks.get(); } }
Wyjście
Software name is: Visual Studio Software price is: 0.0
Sposoby tworzenia obiektów w Javie
Java obsługuje cztery standardowe podejścia.
1. Używanie nowego słowa kluczowego
Najbardziej bezpośredni sposób na utworzenie obiektu.
Java// creating object of class Test Test t = new Test();
2. Korzystanie z refleksji
Używany do dynamicznego ładowania klas, jak widać w frameworkach takich jak Spring.
Javaclass Student { public Student() {} } public class Main { public static void main(String[] args) { try { Class> c = Class.forName('Student'); Student s = (Student) c.getDeclaredConstructor().newInstance(); System.out.println(s); } catch (Exception e) { e.printStackTrace(); } } }
Wyjście
Student@1dbd16a6
3. Korzystanie z metody clone().
clone() tworzy kopię istniejącego obiektu. Klasa musi implementować Cloneable.
Javaclass Geeks implements Cloneable { String name = 'GeeksForGeeks'; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } public static void main(String[] args) { try { Geeks g1 = new Geeks(); Geeks g2 = (Geeks) g1.clone(); System.out.println(g2.name); } catch (Exception e) { e.printStackTrace(); } } }
Wyjście
GeeksForGeeks
4. Korzystanie z deserializacji
Deserializacja to technika odczytywania obiektu ze stanu zapisanego w pliku. Obiekt jest odtwarzany z zapisanego strumienia bajtów.
Patrz Serializacja/Deserializacja w Javie .
Javaimport java.io.*; class Student implements Serializable { private String name; public Student(String name) { this.name = name; } public String toString() { return 'Student: ' + name; } } public class Main { public static void main(String[] args) { try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream('student.ser'))) { out.writeObject(new Student('Alice')); } catch (IOException e) { e.printStackTrace(); } try (ObjectInputStream in = new ObjectInputStream(new FileInputStream('student.ser'))) { Student s = (Student) in.readObject(); System.out.println(s); } catch (Exception e) { e.printStackTrace(); } } }
Wyjście
Student: Alice
Pojedyncze odniesienie może wskazywać na różne obiekty w różnym czasie.
JavaTest test = new Test(); test = new Test();
W przypadku dziedziczenia często używa się odniesienia do obiektu nadrzędnego dla obiektów podrzędnych.
JavaAnimal obj = new Dog(); obj = new Cat();
Obiekty bez odniesień kwalifikują się do wyrzucania elementów bezużytecznych.
Obiekty anonimowe
Obiekty anonimowe tworzone są bez odniesienia i od razu wykorzystywane do jednorazowych operacji.
- Brak zmiennej referencyjnej: Nie można ponownie wykorzystać obiektu.
- Utworzone i używane natychmiast oszczędzają pamięć na krótkotrwałe zadania.
- Powszechne w obsłudze zdarzeń (np. kliknięć przycisków).
new Dog('Max' 'Labrador' 3 'Black').getName();
Powszechne w obsłudze zdarzeń interfejsu użytkownika.
Utwórz quiz