Objectklasse in Java

Objectklasse in Java

Objectklasse op Java is aanwezig in java.lang pakket.

  • Elke klasse is direct of indirect afgeleid van de Object-klasse. Als een klasse geen andere klasse uitbreidt, is het een directe onderliggende klasse van de Java-objectklasse en als het een andere klasse uitbreidt, is het indirect afgeleid.
  • De Object-klasse biedt verschillende methoden, zoals toString()is gelijk aan() hashCode() en vele anderen.
  • De klasse Object fungeert als root van de overervingshiërarchie in elk Java-programma.

Hier gebruiken wij de toString() En hashCode() methoden van de objectklasse om een ​​aangepaste tekenreeksrepresentatie voor een klasse te bieden .

Java
   // Java Code to demonstrate Object class   class   Person     {      String     n  ;     //name      // Constructor      public     Person  (  String     n  )     {      this  .  n     =     n  ;      }      // Override toString() for a       // custom string representation      @Override      public     String     toString  ()     {      return     'Person{name:''     +     n     +     ''}'  ;      }      public     static     void     main  (  String  []     args  )     {          Person     p     =     new     Person  (  'Geek'  );          // Custom string representation      System  .  out  .  println  (  p  .  toString  ());          // Default hash code value      System  .  out  .  println  (  p  .  hashCode  ());         }   }   

Uitvoer
Person{name:'Geek'} 321001045  

Uitleg: In het bovenstaande voorbeeld overschrijven we de toString() methode om te voorzien in een aangepaste tekenreeksrepresentatie van de klasse Person en gebruik de hashCode() methode om de standaard hashcodewaarde van het object weer te geven.

Objectklasse-methoden

De klasse Object biedt meerdere methoden, die als volgt zijn:

  • toString()-methode
  • hashCode()-methode
  • is gelijk aan(Object obj)-methode
  • finalize() methode
  • getClass()-methode
  • kloon() methode
  • wait() kennisgeving() kennisgevingAll() (Gelijktijdigheidsmethoden)
Objectklassemethoden in Java

1. toString() Methode

De toString() biedt een String-weergave van een object en wordt gebruikt om een ​​object naar een String te converteren. De standaardmethode toString() voor de klasse Object retourneert een tekenreeks die bestaat uit de naam van de klasse waarvan het object een instantie is, het at-teken `@' en de niet-ondertekende hexadecimale representatie van de hashcode van het object.

Opmerking: Telkens wanneer we een objectreferentie proberen af ​​te drukken, wordt de methode toString() intern aangeroepen.

Voorbeeld:

openbare klas Student {

openbare tekenreeks toString() {

retourneer 'Studentenobject';

}

}

Uitleg: De methode toString() wordt overschreven om een ​​aangepaste tekenreeksrepresentatie van het Student-object te retourneren.

2. hashCode()-methode

Voor elk object genereert JVM een uniek nummer, een hashcode. Het retourneert verschillende gehele getallen voor verschillende objecten. Een veel voorkomende misvatting over deze methode is dat de hashCode()-methode het adres van het object retourneert, wat niet correct is. Het converteert het interne adres van het object naar een geheel getal met behulp van een algoritme. De hashCode() methode is oorspronkelijk omdat het in Java onmogelijk is om het adres van een object te vinden, dus gebruikt het native talen zoals C/C++ om het adres van het object te vinden.

Gebruik van de hashCode()-methode:

Het retourneert een hashwaarde die wordt gebruikt om objecten in een verzameling te zoeken. JVM (Java Virtual Machine) gebruikt de hashcode-methode terwijl objecten worden opgeslagen in hash-gerelateerde datastructuren zoals HashSet HashMap Hashtable enz. Het belangrijkste voordeel van het opslaan van objecten op basis van hash-code is dat zoeken eenvoudig wordt. 

Opmerking: Overschrijven van hashCode() De methode moet zo worden uitgevoerd dat we voor elk object een uniek nummer genereren. Voor een studentenklasse kunnen we bijvoorbeeld rolnr. van een student uit de hashCode()-methode, omdat deze uniek is. 

Voorbeeld:

openbare klas Student {

int-rol;

@Overschrijven

openbare int hashCode() {

retourrol;

}

}

Uitleg: De hashCode() methode wordt overschreven om een ​​aangepaste hashwaarde te retourneren op basis van de rol van het Student-object.

3. is gelijk aan(Object obj) Methode

De is gelijk aan() methode vergelijkt het gegeven object met het huidige object. Het wordt aanbevolen deze methode te overschrijven om aangepaste gelijkheidsvoorwaarden te definiëren.

Opmerking: Het is over het algemeen noodzakelijk om de hashCode() methode wanneer deze methode wordt overschreven om het algemene contract voor de hashCode-methode te behouden, waarin staat dat gelijke objecten gelijke hashcodes moeten hebben. 

Voorbeeld:

openbare klas Student {

int-rol;


@Overschrijven

public boolean is gelijk aan (Object o) {

if (o exemplaar van Student) {

return this.roll == ((Student) o).roll;

}

retour vals;

}

}

Uitleg: De is gelijk aan() methode wordt overschreven om te vergelijken rollen tussen twee Student-objecten.

4. getClass()-methode

De getClass() method retourneert het klasseobject van 'dit' object en wordt gebruikt om de daadwerkelijke runtimeklasse van het object te verkrijgen. Het kan ook worden gebruikt om metagegevens van deze klasse op te halen. Het geretourneerde Class-object is het object dat is vergrendeld door statische gesynchroniseerde methoden van de weergegeven klasse. Omdat het definitief is, kunnen we het niet terzijde schuiven.

Voorbeeld:

Java
   // Demonstrate working of getClass()   public     class   Geeks     {      public     static     void     main  (  String  []     args  )      {      Object     o     =     new     String  (  'GeeksForGeeks'  );      Class     c     =     o  .  getClass  ();      System  .  out  .  println  (  'Class of Object o is: '      +     c  .  getName  ());      }   }   

Uitvoer
Class of Object o is: java.lang.String  

Uitleg: De getClass() methode wordt gebruikt om de runtimeklasse van het 'o'-object af te drukken.

Opmerking: Na het laden van een .class-bestand zal JVM een object van het type maken java.lang.Class in het Heap-gebied. We kunnen dit klasseobject gebruiken om informatie op klasseniveau te verkrijgen. Het wordt veel gebruikt bij Reflectie  

5. finalize()-methode

De finaliseren() methode wordt aangeroepen net voordat een object wordt verzameld. Het heet de Afvalverzamelaar op een object wanneer de garbage collector vaststelt dat er geen verwijzingen meer naar het object zijn. We moeten de finalize()-methode negeren om systeembronnen te verwijderen, opruimactiviteiten uit te voeren en geheugenlekken te minimaliseren. Voordat de Servlet-objecten worden vernietigd, wordt de webcontainer bijvoorbeeld altijd de finalize-methode genoemd om opruimactiviteiten van de sessie uit te voeren. 

Opmerking: De finalize-methode heet just eenmaal op een object, ook al komt dat object meerdere keren in aanmerking voor garbagecollection. 

Voorbeeld:

Java
   // Demonstrate working of finalize()   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     {          Geeks     t     =     new     Geeks  ();      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'  );      }   }   

Uitvoer
1510467688 end finalize method called  

Uitleg: De finaliseren() methode wordt aangeroepen net voordat het object wordt verzameld.

6. kloon() methode 

De kloon() methode maakt en retourneert een nieuw object dat een kopie is van het huidige object.

Voorbeeld:

public class Boekimplementen Kloonbaar {

privé String t; //titel


openbaar boek(String t) {

dit.t = t;

}

@Overschrijven

public Object clone() gooit CloneNotSupportedException {

retourneer super.kloon();

}

}

Uitleg: De kloon() methode wordt overschreven om een ​​gekloonde kopie van het Boekobject .

7. Concurrency-methoden: wait() kennisgeving() en kennisgevingAll()

Deze methoden zijn gerelateerd aan draad Communicatie in Java . Ze worden gebruikt om threads te laten wachten of om anderen op de hoogte te stellen bij gelijktijdig programmeren.

Voorbeeld van het gebruik van alle Object Class-methoden in Java

Java
   import     java.io.*  ;   public     class   Book     implements     Cloneable     {      private     String     t  ;     // title      private     String     a  ;     // author      private     int     y  ;     // year      public     Book  (  String     t       String     a       int     y  )      {      this  .  t     =     t  ;      this  .  a     =     a  ;      this  .  y     =     y  ;      }      // Override the toString method      @Override     public     String     toString  ()      {      return     t     +     ' by '     +     a     +     ' ('     +     y     +     ')'  ;      }      // Override the equals method      @Override     public     boolean     equals  (  Object     o  )      {      if     (  o     ==     null     ||     !  (  o     instanceof     Book  ))     {      return     false  ;      }      Book     other     =     (  Book  )  o  ;      return     this  .  t  .  equals  (  other  .  getTitle  ())      &&     this  .  a  .  equals  (  other  .  getAuthor  ())      &&     this  .  y     ==     other  .  getYear  ();      }      // Override the hashCode method      @Override     public     int     hashCode  ()      {      int     res     =     17  ;      res     =     31     *     res     +     t  .  hashCode  ();      res     =     31     *     res     +     a  .  hashCode  ();      res     =     31     *     res     +     y  ;      return     res  ;      }      // 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     t  ;     }      public     String     getAuthor  ()     {     return     a  ;     }      public     int     getYear  ()     {     return     y  ;     }      public     static     void     main  (  String  []     args  )      {      // Create a Book object and print its details      Book     b1     =     new     Book  (      'The Hitchhiker's Guide to the Galaxy'        'Douglas Adams'       1979  );      System  .  out  .  println  (  b1  );      // Create a clone of the Book object and print its      // details      Book     b2     =     b1  .  clone  ();      System  .  out  .  println  (  b2  );      // Check if the two objects are equal      System  .  out  .  println  (  'b1 equals b2: '      +     b1  .  equals  (  b2  ));      // Get the hash code of the two objects      System  .  out  .  println  (  'b1 hash code: '      +     b1  .  hashCode  ());      System  .  out  .  println  (  'b2 hash code: '      +     b2  .  hashCode  ());      // Set book1 to null to trigger garbage collection      // and finalize method      b1     =     null  ;      System  .  gc  ();      }   }   

Uitvoer
The Hitchhiker's Guide to the Galaxy by Douglas Adams (1979) The Hitchhiker's Guide to the Galaxy by Douglas Adams (1979) b1 equals b2: true b1 hash code: 1840214527 b2 hash code: 1840214527  

Uitleg: Het bovenstaande voorbeeld demonstreert het gebruik van toString() is gelijk aan() hashCode() En kloon() methoden in de Boek klasse .