This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| java:local_inner_classes [2015/04/30 13:30] gthanos created | java:local_inner_classes [2016/02/26 11:15] (current) | ||
|---|---|---|---|
| Line 8: | Line 8: | ||
| String regularExpression = "[^0-9]"; | String regularExpression = "[^0-9]"; | ||
|  |  | ||
| - | public void validatePhoneNumber(String phoneNumber1, String phoneNumber2) { | + | public void validatePhoneNumber(/*final*/ String phoneNumber1,/*final*/ String phoneNumber2) { | 
|  |  | ||
| final int numberLength = 10; | final int numberLength = 10; | ||
| Line 31: | Line 31: | ||
| } | } | ||
|  |  | ||
| + | // public void printOriginalNumbers() { | ||
| + | // System.out.println("Original numbers are " + phoneNumber1 + | ||
| + | // " and " + phoneNumber2); | ||
| + | // }  | ||
| } | } | ||
| PhoneNumber myNumber1 = new PhoneNumber(phoneNumber1); | PhoneNumber myNumber1 = new PhoneNumber(phoneNumber1); | ||
| PhoneNumber myNumber2 = new PhoneNumber(phoneNumber2); | PhoneNumber myNumber2 = new PhoneNumber(phoneNumber2); | ||
| + |  | ||
| + | // myNumber1.printOriginalNumbers(); | ||
|  |  | ||
| if (myNumber1.getNumber() == null) | if (myNumber1.getNumber() == null) | ||
| Line 53: | Line 59: | ||
| } | } | ||
| </code> | </code> | ||
| + | ===== Πρόσβαση στα μέλη της εξωτερικής κλάσης από την τοπική κλάση ===== | ||
| - | ===== Πρόσβαση στα μέλη της εξωτερικής κλάσης ===== | + | Μία τοπική κλάση έχει πρόσβαση στα μέλη της εξωτερικής κλάσης. Στο προηγούμενο παράδειγμα, παρατηρήστε πως ο κατασκευαστής της κλάσης //PhoneNumber// έχει πρόσβαση στην μεταβλητή //**LocalClassExample.regularExpression**//. | 
| + | |||
| + | ===== Πρόσβαση στις τοπικές μεταβλητές της μεθόδου ===== | ||
| + | |||
| + | Μία τοπική κλάση έχει πρόσβαση στις τοπικές μεταβλητές της μεθόδου μέσα στην οποία συνήθως ορίζεται μόνο αν αυτές έχουν οριστεί ως //final//. Δηλώνοντας μία μεταβλητή ως //final// δηλώνουμε ότι η τιμή αυτή δεν πρόκειται και δεν μπορεί να αλλάξει. Για παράδειγμα η μεταβλητή numberLength δηλώνεται //final// | ||
| + | <code java> | ||
| + | final int numberLength = 10; | ||
| + | </code> | ||
| + | Αν βγάλετε τα σχόλια από την γραμμή 15 ''numberLength = 7;'', θα παρατηρήσετε ότι λαμβάνετε το παρακάτω μήνυμα λάθους: | ||
| + | <code> | ||
| + | LocalClassExample.java:15: error: cannot assign a value to final variable numberLength | ||
| + | numberLength = 7; | ||
| + | </code> | ||
| - | Μία τοπική κλάση έχει πρόσβαση στα μέλη της εξωτερικής κλάσης. Στο προηγούμενο παράδειγμα, παρατηρήστε πως ο κατασκευαστής της κλάσης //PhoneNumber// έχει πρόσβαση στην μεταβλητή //LocalClassExample.regularExpression//. | + | Ομοίως αν προσθέσετε τους προσδιοριστές //final// στις παραμέτρους //**phoneNumber1**// και //**phoneNumber2**// τότε θα μπορείτε να εισάγετε την μέθοδο //**printOriginalNumbers**// οι οποία χρησιμοποιεί τις μεταβλητές αυτές. | 
| + | <WRAP tip 80% center round> | ||
| + | Στην **Java 8** ή μεταγενέστερα εισάγεται η έννοια της //effectively final// μεταβλητής. Ως //effectively final// ορίζεται κάθε τοπική μεταβλητή της οποίας η τιμή δεν μεταβάλλεται μετά την αρχικοποίηση της. | ||
| + | </WRAP> | ||
| + | |Προηγούμενο: [[ :java:inner_classes| Μη στατικές εμφωλευμένες κλάσεις  ]] | Επόμενο: [[ :java:anon_inner_classes | Ανώνυμες εμφωλευμένες κλάσεις ]]| | ||