Both sides previous revisionPrevious revisionNext revision | Previous revision |
java:class_fields [2020/02/08 05:53] – [Τύποι πεδίων της κλάσης] gthanos | java:class_fields [2022/02/23 10:11] (current) – gthanos |
---|
===== Τύποι πεδίων της κλάσης ===== | ===== Τύποι πεδίων της κλάσης ===== |
| |
Μία κλάση μπορεί να διαθέτει | Μία κλάση μπορεί να διαθέτει τους εξής τύπους πεδίων |
- **[[java:variables|primitive]] (βασικούς) τύπους δεδομένων:** (πχ. int, long, char, double, float κλπ, σε αναλογία με τους τύπους δεδομένων της γλώσσας προγραμματισμού C) και | - **[[java:variables|primitive]] (βασικούς) τύπους δεδομένων:** (πχ. int, long, char, double, float κλπ, σε αναλογία με τους τύπους δεδομένων της γλώσσας προγραμματισμού C) και |
- **[[java:variables|reference]] τύπους δεδομένων**: σύνθετους τύπους δεδομένων οι οποίοι περιγράφονται από κλάσεις. | - **[[java:variables|reference]] (αναφορικούς) τύπους δεδομένων**: σύνθετους τύπους δεδομένων οι οποίοι περιγράφονται από κλάσεις. |
| |
Βασικούς τύπους δεδομένων συναντήσαμε στην [[java:class|κλάση Rectangle της προηγούμενης σελίδας]]. **Reference** τύποι δεδομένων είναι οι μη βασικοί τύποι δεδομένων που προδιαγράφονται από κλάσεις. Για παράδειγμα, ας πούμε ότι στο παραπάνω παράδειγμα θέλουμε να προσθέσουμε την θέση του ορθογώνιου παραλληλόγραμμου που ορίσαμε στην προηγούμενη παράγραφο στον χώρο. Η θέση του παραλληλογράμμου μπορεί να προσδιοριστεί από την παρακάτω κλάση **Point** η οποία περιγράφει ένα σημείο στο χώρο. Θεωρήστε ότι το σημείο προσδιορίζει την κάτω αριστερή γωνία του παραλληλογράμμου στον χώρο, όπως φαίνεται στο παρακάτω σχήμα. | === Βασικοί Τύποι === |
| |
| Βασικοί τύποι δεδομένων είναι οι ακεραιες μεταβλητές που συναντήσαμε στην [[java:class|κλάση Rectangle της προηγούμενης σελίδας]]. Οι βασικοί τύποι δεδομένων περιγράφονται περιληπτικά στον παρακάτω πίνακα: |
| |
| ^ τύπος δεδομένων ^ byte ^ short ^ int ^ long ^ float ^ double ^ boolean ^ char ^ |
| | αριθμός bits | 8 | 16 | 32 | 64 | 32-bit IEEE 754 floating point | 64-bit IEEE 754 floating point | not-applicable<color red>*</color> | 16 | |
| | αριθμός bytes | 1 | 2 | 4 | 8 | 4 | 8 | not-applicable<color red>*</color> | 2 | |
| | εύρος τιμών | -128 έως 127 | -32.768 έως 32.767 | -2<sup>31</sup> έως 2<sup>31</sup>-1 | -2<sup>63</sup> έως 2<sup>63</sup> | | | μόνο δύο τιμές //true// και //false// | 16bit Unicode characters | |
| |
| <color red>*</color> Ο τύπος **boolean** λαμβάνει μόνο δύο τιμές. Ο αριθμός των bytes που καταλαμβάνονται δεν ορίζεται και πιθανόν διαφέρει από υλοποίηση σε υλοποίηση JVM. |
| |
| === Αναφορικοί Τύποι === |
| |
| Αναφορικοί (reference) τύποι δεδομένων είναι οι μη βασικοί τύποι δεδομένων που περιγράφονται από κλάσεις. Για παράδειγμα, ας υποθέσουμε ότι θέλουμε να προσθέσουμε τη θέση του ορθογώνιου παραλληλόγραμμου που ορίσαμε στην προηγούμενη παράγραφο στο δισδιάστατο χώρο. Η θέση του παραλληλογράμμου μπορεί να προσδιοριστεί από την παρακάτω κλάση **Point** η οποία περιγράφει ένα σημείο στο χώρο μέσω των συντεταγμένων του στους δύο άξονες. Θεωρούμε ότι το σημείο προσδιορίζει τη γωνία του παραλληλογράμμου με τις μικρότερες τιμές στον όριζόντιο και κάθετο άξονα (δηλ την κάτω αριστερή γωνία), όπως φαίνεται στο παρακάτω σχήμα. |
| |
{{ :java:rectangle-origin.png?350 | }} | {{ :java:rectangle-origin.png?350 | }} |
| |
<code java Point.java> | <code java Point.java> |
| class Point { |
public class Point { | int x; // x coordinate |
private int x; // x coordinate | int y; // y coordinate |
private int y; // y coordinate | |
| public Point(int xPos, int yPos) { |
public Point(int xPos, int yPos) { | x = xPos; |
x = xPos; | y = yPos; |
y = yPos; | } |
} | |
| int getX() { |
public int getX() { | return x; |
return x; | } |
} | |
| void setX(int xPos) { |
public void setX(int xPos) { | x = xPos; |
x = xPos; | } |
} | |
| int getY() { |
public int getY() { | return y; |
return y; | } |
} | |
| void setY(int yPos) { |
public void setY(int yPos) { | y = yPos; |
y = yPos; | } |
} | |
} | } |
</code> | </code> |
| |
Με χρήση της παραπάνω κλάσης η κλάση ''Rectangle'' γίνεται. | Με χρήση της παραπάνω κλάσης η κλάση ''Rectangle'' μετασχηματίζεται ως εξής. |
| |
<code java Rectangle.java> | <code java Rectangle.java> |
public class Rectangle { | class Rectangle { |
| |
// the Rectangle class has 3 fields | // the Rectangle class has 3 fields |
public int width; | int width; |
public int height; | int height; |
public Point origin; | Point origin; |
| |
// the Rectangle class has one constructor | // the Rectangle class has one constructor |
} | } |
| |
public void setWidth(int newWidth ) { | void setWidth(int newWidth ) { |
width = newWidth; | width = newWidth; |
} | } |
| |
public void setHeight(int newHeight ) { | void setHeight(int newHeight ) { |
height = newHeight; | height = newHeight; |
} | } |
| |
public void setOrigin(Point newOrigin) { | void setOrigin(Point newOrigin) { |
origin = newOrigin; | origin = newOrigin; |
} | } |
| |
public void getOrigin() { | Point getOrigin() { |
return origin; | return origin; |
} | } |
| |
public void setOrigin(int newX, int newY) { | int area() { |
origin.setX(newX); | return width * height; |
origin.setY(newY); | |
} | } |
} | } |
</code> | </code> |
| |
Η κλάση ''Rectangle'' επομένως περιέχει εκτός από **primitive** πεδία και ένα **reference** πεδίο, το πεδίο ''origin''. | Η κλάση ''Rectangle'' επομένως περιέχει εκτός από **primitive** πεδία και ένα **reference** πεδίο, το πεδίο ''origin''. |
| |
<WRAP todo 80% center round> | |
Μεταγλωττίστε τις δύο παραπάνω κλάσεις γράφοντας | |
<code> | |
javac Point.java | |
javac Rectangle.java | |
</code> | |
</WRAP> | |
| |
|Προηγούμενο: [[:java:class| H κλάση ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:class_methods | Μέθοδοι της Κλάσης ]]| | |Προηγούμενο: [[:java:class| H κλάση ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:class_methods | Μέθοδοι της Κλάσης ]]| |