java:objects
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
java:objects [2022/02/22 11:15] – [Ένα πιο εκτεταμένο παράδειγμα] gthanos | java:objects [2022/02/23 15:25] (current) – [Garbage Collection] gthanos | ||
---|---|---|---|
Line 121: | Line 121: | ||
| | ||
// print origin of rect1 and rect2 | // print origin of rect1 and rect2 | ||
- | System.out.println(" | + | System.out.println(" |
System.out.println(" | System.out.println(" | ||
| | ||
Line 133: | Line 133: | ||
| | ||
// print origin of rect1 and rect2 | // print origin of rect1 and rect2 | ||
- | System.out.println(" | + | System.out.println(" |
- | System.out.println(" | + | System.out.println(" |
| | ||
// assign originOne value to originTwo | // assign originOne value to originTwo | ||
Line 142: | Line 142: | ||
</ | </ | ||
- | Αποθηκεύστε και τα τρία αρχεία | + | <WRAP todo 80% center round> |
- | + | Δημιουργήστε ένα project με τα παραπάνω | |
- | < | + | </WRAP> |
- | javac Point.java // μεταγλώττιση | + | |
- | javac Rectange.java | + | |
- | javac CreateObjectDemo.java | + | |
- | </ | + | |
- | + | ||
- | Για να το τρέξετε γράφετε | + | |
- | + | ||
- | < | + | |
- | java CreateObjectDemo | + | |
- | </ | + | |
- | + | ||
- | Το παραπάνω πρόγραμμα τυπώνει τα εξής στην κονσόλα. | + | |
- | + | ||
- | < | + | |
- | [rect1] | + | |
- | [rect2] | + | |
- | [rect2] | + | |
- | [rect1] | + | |
- | [rect2] | + | |
- | </code> | + | |
==== Επεξήγηση του παραπάνω κώδικα ===== | ==== Επεξήγηση του παραπάνω κώδικα ===== | ||
Line 202: | Line 181: | ||
rect2.setOrigin(origin1); | rect2.setOrigin(origin1); | ||
// display rect2 origin | // display rect2 origin | ||
- | System.out.println(" | + | System.out.println(" |
| | ||
// move rect2 origin and display its new position | // move rect2 origin and display its new position | ||
Line 208: | Line 187: | ||
| | ||
// print origin of rect1 and rect2 | // print origin of rect1 and rect2 | ||
- | System.out.println(" | + | System.out.println(" |
- | System.out.println(" | + | System.out.println(" |
</ | </ | ||
Στις γραμμές αυτές συμβαίνουν τα εξής: | Στις γραμμές αυτές συμβαίνουν τα εξής: | ||
- | - Το αντικείμενο '' | + | - Το αντικείμενο '' |
+ | - Στη συνέχεια, | ||
- Εκτυπώνονται οι αλλαγές για το '' | - Εκτυπώνονται οι αλλαγές για το '' | ||
- Εκτυπώνονται οι αλλαγές για το '' | - Εκτυπώνονται οι αλλαγές για το '' | ||
- | Παρατηρούμε ότι οι συντεταγμένες του πεδίου **origin** άλλαξαν | + | Παρατηρούμε ότι οι συντεταγμένες του πεδίου **origin** άλλαξαν για το αντικείμενο '' |
Τα παρακάτω δύο σχήματα αποτυπώνουν α) την αλλαγή του πεδίου **origin** του '' | Τα παρακάτω δύο σχήματα αποτυπώνουν α) την αλλαγή του πεδίου **origin** του '' | ||
Line 239: | Line 219: | ||
Προκειμένου να δημιουργηθούν νέα αντικείμενα χρησιμοποιείται ο τελεστής **new**. O τελεστής **new** χρησιμοποιείται συνήθως με τον κατασκευαστή μίας κλάσης προκειμένου να κάνει τα εξής: | Προκειμένου να δημιουργηθούν νέα αντικείμενα χρησιμοποιείται ο τελεστής **new**. O τελεστής **new** χρησιμοποιείται συνήθως με τον κατασκευαστή μίας κλάσης προκειμένου να κάνει τα εξής: | ||
- Δέσμευση της απαραίτητης μνήμης και δημιουργία του αντικειμένου. Η αρχικά ορισμένη μεταβλητή δείχνει πλέον στην περιοχή μνήμης που έχει δεσμευτεί. | - Δέσμευση της απαραίτητης μνήμης και δημιουργία του αντικειμένου. Η αρχικά ορισμένη μεταβλητή δείχνει πλέον στην περιοχή μνήμης που έχει δεσμευτεί. | ||
- | - Αρχικοποίηση των εσωτερικών μεταβλητών (πεδίων) του αντικειμένου με κλήση του κατάλληλου κατασκευαστή της κλάσης. Εάν δεν έχει οριστεί κατασκευαστής τότε ο τελεστής **new** καλείται με χρήση του default κατασκευαστή (default constructor) που δεν έχει ορίσματα | + | - Αρχικοποίηση των εσωτερικών μεταβλητών (πεδίων) του αντικειμένου με κλήση του κατάλληλου κατασκευαστή της κλάσης. Εάν δεν έχει οριστεί κατασκευαστής τότε ο τελεστής **new** καλείται με χρήση του default κατασκευαστή (//default constructor//) που δεν έχει ορίσματα. |
+ | |||
+ | <code java> MyObject obj = new MyObject();</ | ||
<WRAP tip 80% center round> | <WRAP tip 80% center round> | ||
Line 247: | Line 229: | ||
</ | </ | ||
- | ===== Πολλαπλοί κατασκευαστές σε μία κλάση ===== | + | ===== Διαφορετικοί κατασκευαστές σε μία κλάση ===== |
- | Μία κλάση μπορεί να έχει πολλούς διαφορετικούς κατασκευαστές. Κάθε κατασκευαστής ορίζει | + | Μία κλάση μπορεί να έχει περισσότερους από ένα |
<code java> | <code java> | ||
Line 262: | Line 244: | ||
- | ===== Χρήση | + | ===== Χρήση |
Όταν φτιάξετε ένα αντικείμενο είναι σίγουρο ότι θα θέλετε να το χρησιμοποιήσετε προκειμένου να κάνετε μία εργασία όπως να γράψετε κάτι στα δεδομένα του, να διαβάσετε από αυτά ή να χρησιμοποιήσετε κάποια από τις μεθόδους του. | Όταν φτιάξετε ένα αντικείμενο είναι σίγουρο ότι θα θέλετε να το χρησιμοποιήσετε προκειμένου να κάνετε μία εργασία όπως να γράψετε κάτι στα δεδομένα του, να διαβάσετε από αυτά ή να χρησιμοποιήσετε κάποια από τις μεθόδους του. | ||
Line 302: | Line 284: | ||
Οι γλώσσες προγραμματισμού που μέχρι τώρα έχετε γνωρίσει (βλέπε **C**) αναθέτουν την ευθύνη δέσμευσης μνήμης στον προγραμματιστή μέσω των συναρτήσεων **malloc()** και **free()**. Σε αντιδιαστολή, | Οι γλώσσες προγραμματισμού που μέχρι τώρα έχετε γνωρίσει (βλέπε **C**) αναθέτουν την ευθύνη δέσμευσης μνήμης στον προγραμματιστή μέσω των συναρτήσεων **malloc()** και **free()**. Σε αντιδιαστολή, | ||
- | Πώς όμως αποδεσμεύεται η μνήμη που δεσμεύτηκε προηγούμενα από το πρόγραμμα μας, αλλά δεν την χρειαζόμαστε πλέον; Περιοδικά το **JVM** κοιτάει εάν υπάρχει δεσμευμένη μνήμη για αντικείμενα στα οποία δεν υφίστανται πλέον αναφορές/ | + | Πώς όμως αποδεσμεύεται η μνήμη που δεσμεύτηκε προηγούμενα από το πρόγραμμα μας, αλλά δεν την χρειαζόμαστε πλέον; Περιοδικά το **JVM** κοιτάει εάν υπάρχει δεσμευμένη μνήμη για αντικείμενα στα οποία δεν υφίστανται πλέον αναφορές/ |
Ο μηχανισμός **Garbage Collection** απαντάται σε αρκετές γλώσσες υψηλού επιπέδου, | Ο μηχανισμός **Garbage Collection** απαντάται σε αρκετές γλώσσες υψηλού επιπέδου, |
java/objects.1645528553.txt.gz · Last modified: 2022/02/22 11:15 (external edit)