logo

Trieda objektov v jazyku Java

Objekt trieda je prítomná v java.lang balík. Každá trieda v Jave je priamo alebo nepriamo odvodená od Objekt trieda. Ak trieda nerozširuje žiadnu inú triedu, potom je to priama podriadená trieda Objekt a ak rozširuje ďalšiu triedu, potom je nepriamo odvodená. Preto sú metódy triedy Object dostupné pre všetky triedy Java. Trieda Object teda funguje ako koreň hierarchie dedičnosti v akomkoľvek programe Java.

Trieda objektov v jazyku Java



Použitie metód tried objektov

Trieda Object poskytuje viacero metód, ktoré sú nasledovné:

prepínacia metóda java
  • metóda toString().
  • metóda hashCode().
  • rovná sa (Object objekt) metóda
  • metóda finalize().
  • getClass() metóda
  • metóda clone().
  • metódy wait(), notify() notifyAll().

1. metóda toString().

Funkcia toString() poskytuje reťazcovú reprezentáciu objektu a používa sa na konverziu objektu na reťazec. Predvolená metóda toString() pre triedu Object vracia reťazec pozostávajúci z názvu triedy, ktorej je objekt inštanciou, zavináča „@“ a hexadecimálnej reprezentácie hašovacieho kódu objektu bez znamienka. Inými slovami, je definovaný ako:

// Default behavior of toString() is to print class name, then // @, then unsigned hexadecimal representation of the hash code // of the object  public String toString() {  return getClass().getName() + '@' + Integer.toHexString(hashCode()); }>

Vždy sa odporúča prepísať natiahnuť() metóda na získanie našej vlastnej reťazcovej reprezentácie objektu. Ďalšie informácie o prepísaní metódy toString() nájdete v – Prepísanie toString() v jazyku Java



Poznámka: Kedykoľvek sa pokúsime vytlačiť akúkoľvek referenciu na objekt, potom sa interne zavolá metóda toString().

Student s = new Student();  // Below two statements are equivalent System.out.println(s); System.out.println(s.toString());>

2. metóda hashCode().

Pre každý objekt JVM generuje jedinečné číslo, ktorým je hashcode. Vracia odlišné celé čísla pre odlišné objekty. Bežnou mylnou predstavou o tejto metóde je, že metóda hashCode() vracia adresu objektu, čo nie je správne. Konvertuje internú adresu objektu na celé číslo pomocou algoritmu. Metóda hashCode() je natívny pretože v Jave nie je možné nájsť adresu objektu, takže na nájdenie adresy objektu používa natívne jazyky ako C/C++.

Použitie metódy hashCode().

Vracia hodnotu hash, ktorá sa používa na vyhľadávanie objektov v kolekcii. JVM (Java Virtual Machine) používa metódu hashcode pri ukladaní objektov do dátových štruktúr súvisiacich s hashovaním, ako sú HashSet, HashMap, Hashtable atď. Hlavnou výhodou ukladania objektov na základe hash kódu je, že vyhľadávanie sa stáva jednoduchým.



Poznámka: Prepísať z hashCode() metódu je potrebné urobiť tak, že pre každý objekt vygenerujeme jedinečné číslo. Napríklad pre triedu Študent môžeme vrátiť rolku č. študenta z metódy hashCode(), keďže je jedinečná.

Java




// Java program to demonstrate working of> // hashCode() and toString()> public> class> Student {> >static> int> last_roll =>100>;> >int> roll_no;> >// Constructor> >Student()> >{> >roll_no = last_roll;> >last_roll++;> >}> >// Overriding hashCode()> >@Override> public> int> hashCode() {>return> roll_no; }> >// Driver code> >public> static> void> main(String args[])> >{> >Student s =>new> Student();> >// Below two statements are equivalent> >System.out.println(s);> >System.out.println(s.toString());> >}> }>

>

>

Výkon :

Student@64 Student@64>

Všimnite si, že 4*160+ 6*161= 100

3. metóda rovná sa (Object obj).

Porovnáva daný objekt s týmto objektom (objektom, na ktorom sa metóda volá). Poskytuje všeobecný spôsob porovnávania objektov z hľadiska rovnosti. Odporúča sa prepísať rovná sa (objekt objektu) metóda na získanie vlastnej podmienky rovnosti na objektoch. Viac informácií o metóde prepísania rovnosti (Object obj) nájdete na – Prepísanie sa rovná metóde v jazyku Java

Poznámka: Vo všeobecnosti je potrebné prepísať hashCode() vždy, keď je táto metóda prepísaná, aby sa zachovala všeobecná zmluva pre metódu hashCode, ktorá uvádza, že rovnaké objekty musia mať rovnaké hash kódy.

4. metóda getClass().

Vracia objekt triedy tohto objektu a používa sa na získanie skutočnej runtime triedy objektu. Môže sa použiť aj na získanie metadát tejto triedy. Vrátený objekt Class je objekt, ktorý je uzamknutý statickými synchronizovanými metódami reprezentovanej triedy. Keďže je konečný, neprepíšeme ho.

Java




// Java program to demonstrate working of getClass()> public> class> Test {> >public> static> void> main(String[] args)> >{> >Object obj =>new> String(>'GeeksForGeeks'>);> >Class c = obj.getClass();> >System.out.println(>'Class of Object obj is : '> >+ c.getName());> >}> }>

>

>

Výkon:

Class of Object obj is : java.lang.String>

Poznámka: Po načítaní súboru .class JVM vytvorí objekt typu java.lang.Class v oblasti Haldy. Tento objekt triedy môžeme použiť na získanie informácií na úrovni triedy. Je široko používaný v Reflexia

5. metóda finalize().

Táto metóda sa volá tesne predtým, ako sa objekt pozbiera. Nazýva sa to Smetiar na objekte, keď zberač odpadu zistí, že už neexistujú žiadne odkazy na objekt. Mali by sme prepísať metódu finalize(), aby sme sa zbavili systémových prostriedkov, vykonávali činnosti čistenia a minimalizovali úniky pamäte. Napríklad pred zničením webového kontajnera objektov Servlet, ktorý sa vždy nazýva finalizačná metóda na vykonanie čistiacich činností relácie.

Poznámka: Metóda finalizácie sa nazýva just raz na objekt, aj keď je tento objekt vhodný na zber odpadu viackrát.

Java




// Java program to demonstrate working of finalize()> public> class> Test {> >public> static> void> main(String[] args)> >{> >Test t =>new> Test();> >System.out.println(t.hashCode());> >t =>null>;> >// calling garbage collector> >System.gc();> >System.out.println(>'end'>);> >}> >@Override> protected> void> finalize()> >{> >System.out.println(>'finalize method called'>);> >}> }>

>

>

Výkon:

1510467688 finalize method called end>

6. metóda clone().

Vráti nový objekt, ktorý je presne rovnaký ako tento objekt. Pre metódu clone() pozri Klonovať() .

žiadny vstupný signál

Zvyšné tri metódy počkaj () , oznámiť () notifyAll() súvisia s Concurrency. Odkazujú na Komunikácia medzi vláknami v jazyku Java pre podrobnosti.

Príklad použitia všetkých metód triedy Object v Jave

Java




import> java.io.*;> public> class> Book>implements> Cloneable {> >private> String title;> >private> String author;> >private> int> year;> >public> Book(String title, String author,>int> year)> >{> >this>.title = title;> >this>.author = author;> >this>.year = year;> >}> >// Override the toString method> >@Override> public> String toString()> >{> >return> title +>' by '> + author +>' ('> + year +>')'>;> >}> >// Override the equals method> >@Override> public> boolean> equals(Object obj)> >{> >if> (obj ==>null> || !(obj>instanceof> Book)) {> >return> false>;> >}> >Book other = (Book)obj;> >return> this>.title.equals(other.getTitle())> >&&>this>.author.equals(other.getAuthor())> >&&>this>.year == other.getYear();> >}> >// Override the hashCode method> >@Override> public> int> hashCode()> >{> >int> result =>17>;> >result =>31> * result + title.hashCode();> >result =>31> * result + author.hashCode();> >result =>31> * result + year;> >return> result;> >}> >// Override the clone method> >@Override> public> Book clone()> >{> >try> {> >return> (Book)>super>.clone();> >}> >catch> (CloneNotSupportedException e) {> >throw> new> AssertionError();> >}> >}> >// Override the finalize method> >@Override> protected> void> finalize()>throws> Throwable> >{> >System.out.println(>'Finalizing '> +>this>);> >}> >public> String getTitle() {>return> title; }> >public> String getAuthor() {>return> author; }> >public> int> getYear() {>return> year; }> >public> static> void> main(String[] args)> >{> >// Create a Book object and print its details> >Book book1 =>new> Book(> >'The Hitchhiker's Guide to the Galaxy'>,> >'Douglas Adams'>,>1979>);> >System.out.println(book1);> >// Create a clone of the Book object and print its> >// details> >Book book2 = book1.clone();> >System.out.println(book2);> >// Check if the two objects are equal> >System.out.println(>'book1 equals book2: '> >+ book1.equals(book2));> >// Get the hash code of the two objects> >System.out.println(>'book1 hash code: '> >+ book1.hashCode());> >System.out.println(>'book2 hash code: '> >+ book2.hashCode());> >// Set book1 to null to trigger garbage collection> >// and finalize method> >book1 =>null>;> >System.gc();> >}> }>

>

>

Výkon

The Hitchhiker's Guide to the Galaxy by Douglas Adams (1979) The Hitchhiker's Guide to the Galaxy by Douglas Adams (1979) book1 equals book2: true book1 hash code: 1840214527 book2 hash code: 1840214527>