logo

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

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

רשימת קישורים ב-java
  • כל מחלקה נגזרת באופן ישיר או עקיף ממחלקת 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' title=

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() שיטות ב שיעור ספרים .