מחלקת אובייקט ב-Java

מחלקת אובייקט ב-Java

מחלקת אובייקט ב-Java קיים ב java.lang חֲבִילָה.

  • כל מחלקה נגזרת באופן ישיר או עקיף ממחלקת Object. אם כיתה אינה מרחיבה אף כיתה אחרת, היא כיתת ילד ישירה של הכיתה מחלקת Java Object ואם זה מרחיב מחלקה אחרת אז זה נגזר בעקיפין.
  • המחלקה Object מספקת מספר שיטות כגון toString()שווה() hashCode() ועוד רבים אחרים.
  • המחלקה Object פועלת כשורש של היררכיית הירושה בכל תוכנית Java.

כאן אנו משתמשים ב- toString() ו hashCode() שיטות של מחלקת אובייקט לספק ייצוג מחרוזת מותאם אישית עבור מחלקה .

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  ());         }   }   

תְפוּקָה
Person{name:'Geek'} 321001045  

הֶסבֵּר: בדוגמה שלמעלה אנו עוקפים את ה toString() שיטה לספק א ייצוג מחרוזת מותאמת אישית של המחלקה Person ולהשתמש ב hashCode() שיטה להצגת ערך ברירת המחדל של קוד ה-hash של האובייקט.

שיטות מחלקות אובייקט

המחלקה Object מספקת מספר שיטות שהן כדלקמן:

  • שיטת toString().
  • שיטת hashCode()
  • שיטת equals(Object obj).
  • שיטת finalize()
  • שיטת getClass()
  • שיטת clone().
  • wait() notify() notifyAll() (שיטות במקביל)
שיטות מחלקות אובייקט ב-Java

1. שיטת toString().

ה toString() מספק ייצוג מחרוזת של אובייקט ומשמש להמרת אובייקט למחרוזת. שיטת ברירת המחדל toString() עבור class Object מחזירה מחרוזת המורכבת מהשם של המחלקה שהאובייקט הוא מופע שלה, התו at-sign `@' והייצוג הקסדצימלי ללא סימן של קוד ה-hash של האובייקט.

פֶּתֶק: בכל פעם שאנו מנסים להדפיס הפניה לאובייקט אז באופן פנימי נקרא שיטת toString().

דוּגמָה:

כיתה ציבורית תלמיד {

public String toString() {

החזר 'חפץ תלמיד';

}

}

הֶסבֵּר: שיטת toString() נדחפת כדי להחזיר ייצוג מחרוזת מותאמת אישית של האובייקט Student.

2. שיטה hashCode()

עבור כל אובייקט JVM מייצר מספר ייחודי שהוא קוד hash. הוא מחזיר מספרים שלמים ברורים עבור אובייקטים נפרדים. טעות נפוצה לגבי שיטה זו היא ששיטת hashCode() מחזירה את הכתובת של האובייקט שאינה נכונה. הוא ממיר את הכתובת הפנימית של האובייקט למספר שלם באמצעות אלגוריתם. שיטת hashCode() היא יָלִיד כי בג'אווה אי אפשר למצוא כתובת של אובייקט ולכן הוא משתמש בשפות מקומיות כמו C/C++ כדי למצוא את הכתובת של האובייקט.

שימוש בשיטת hashCode():

הוא מחזיר ערך hash המשמש לחיפוש אובייקטים באוסף. JVM (Java Virtual Machine) משתמש בשיטת hashcode תוך שמירת אובייקטים במבני נתונים הקשורים ל-hash כמו HashSet HashMap Hashtable וכו'. היתרון העיקרי של שמירת אובייקטים המבוססים על קוד hash הוא שהחיפוש הופך קל. 

פֶּתֶק: ביטול של hashCode() השיטה צריכה להיעשות כך שלכל אובייקט ניצור מספר ייחודי. לדוגמא עבור כיתת סטודנטים נוכל להחזיר את גליל מס. של תלמיד משיטת hashCode() מכיוון שהיא ייחודית. 

דוּגמָה:

כיתה ציבורית תלמיד {

int roll;

@עקוף

public int hashCode() {

רול להחזיר;

}

}

הֶסבֵּר: ה hashCode() השיטה נדחפת כדי להחזיר ערך גיבוב מותאם אישית המבוסס על הגלישה של האובייקט Student.

3. שיטת equals(Object obj).

ה שווה() השיטה משווה את האובייקט הנתון לאובייקט הנוכחי. מומלץ לעקוף שיטה זו כדי להגדיר תנאי שוויון מותאמים אישית.

פֶּתֶק: בדרך כלל יש צורך לעקוף את hashCode() מתודה בכל פעם שדרך זו נדחקת כדי לשמור על החוזה הכללי עבור שיטת hashCode הקובעת שלאובייקטים שווים חייבים להיות קודי hash שווים. 

דוּגמָה:

כיתה ציבורית תלמיד {

int roll;


@עקוף

בוליאני ציבורי שווה (Object o) {

if (o instanceof Student) {

return this.roll == ((סטודנט) o).roll;

}

החזר שקר;

}

}

הֶסבֵּר: ה שווה() השיטה נדחקת כדי להשוות גָלִיל בין שני חפצי סטודנט.

4. שיטת getClass()

ה getClass() השיטה מחזירה את אובייקט המחלקה של האובייקט 'זה' ומשמשת כדי לקבל את מחלקת זמן הריצה בפועל של האובייקט. זה יכול לשמש גם כדי לקבל מטא נתונים של מחלקה זו. אובייקט המחלקה המוחזר הוא האובייקט שננעל על ידי שיטות מסונכרנות סטטיות של המחלקה המיוצגת. מכיוון שהוא סופי אז אנחנו לא מחליפים אותו.

דוּגמָה:

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  ());      }   }   

תְפוּקָה
Class of Object o is: java.lang.String  

הֶסבֵּר: ה getClass() השיטה משמשת להדפסת מחלקת זמן הריצה של האובייקט 'o'.

פֶּתֶק: לאחר טעינת קובץ .class JVM יצור אובייקט מהסוג java.lang.Class באזור ה-Heap. אנו יכולים להשתמש באובייקט המחלקה הזה כדי לקבל מידע ברמת הכיתה. זה נמצא בשימוש נרחב ב הִשׁתַקְפוּת  

5. שיטת finalize()

ה לְסַכֵּם() השיטה נקראת רגע לפני שאובייקט נאסף אשפה. זה נקרא ה אספן אשפה על חפץ כאשר אספן האשפה קובע שאין עוד אזכורים לחפץ. עלינו לעקוף את שיטת finalize() כדי להיפטר ממשאבי מערכת לבצע פעולות ניקוי ולמזער דליפות זיכרון. לדוגמה, לפני השמדת קומיכל האובייקטים של Servlet נקרא תמיד שיטת finalize לביצוע פעולות ניקוי של הפגישה. 

פֶּתֶק: שיטת הסופי נקראת פשוט פַּעַם על חפץ למרות שהחפץ הזה כשיר לאיסוף אשפה מספר פעמים. 

דוּגמָה:

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'  );      }   }   

תְפוּקָה
1510467688 end finalize method called  

הֶסבֵּר: ה לְסַכֵּם() השיטה נקראת רגע לפני שהאובייקט נאסף אשפה.

6. שיטת clone() 

ה clone() השיטה יוצרת ומחזירה אובייקט חדש שהוא עותק של האובייקט הנוכחי.

דוּגמָה:

ספר מחלקה ציבורית מיישמת Cloneable {

מחרוזת פרטית t; //כּוֹתֶרֶת


ספר ציבורי(מחרוזת t) {

this.t = t;

}

@עקוף

public Object clone() זורק CloneNotSupportedException {

return super.clone();

}

}

הֶסבֵּר: ה clone() השיטה נדחפת כדי להחזיר עותק משובט של חפץ ספר .

7. שיטות במקביל: wait() notify() ו-notifyAll()

שיטות אלו קשורות ל תקשורת חוט ב-Java . הם משמשים כדי לגרום לשרשורים לחכות או להודיע ​​לאחרים בתכנות במקביל.

דוגמה לשימוש בכל שיטות ה-Object Class ב-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  ();      }   }   

תְפוּקָה
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  

הֶסבֵּר: הדוגמה לעיל מדגימה את השימוש ב toString() שווה() hashCode() ו clone() שיטות ב שיעור ספרים .


אולי תאהבו