java:local_inner_classes

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
java:local_inner_classes [2015/04/30 13:47]
gthanos [Τοπικές κλάσεις]
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:
       }       }
       ​       ​
-      // Valid in JDK 8 and later 
 //    public void printOriginalNumbers() { //    public void printOriginalNumbers() {
 //      System.out.println("​Original numbers are " + phoneNumber1 + //      System.out.println("​Original numbers are " + phoneNumber1 +
Line 41: Line 40:
     PhoneNumber myNumber2 = new PhoneNumber(phoneNumber2);​     PhoneNumber myNumber2 = new PhoneNumber(phoneNumber2);​
     ​     ​
-    // Valid in JDK 8 and later: 
- 
 //  myNumber1.printOriginalNumbers();​ //  myNumber1.printOriginalNumbers();​
     ​     ​
Line 68: Line 65:
 ===== Πρόσβαση στις τοπικές μεταβλητές της μεθόδου ===== ===== Πρόσβαση στις τοπικές μεταβλητές της μεθόδου =====
  
-Μία τοπική κλάση έχει πρόσβαση στις τοπικές μεταβλητές της μεθόδου μέσα στην οποία συνήθως ορίζεται μόνο αν αυτές έχουν οριστεί ως //final//. Δηλώνοντας μία μεταβλητή ως //final// δηλώνουμε ότι η τιμή αυτή δεν πρόκειται και δεν μπορεί να αλλάξει. Αν βγάλετε τα σχόλια από την γραμμή 15,  +Μία τοπική κλάση έχει πρόσβαση στις τοπικές μεταβλητές της μεθόδου μέσα στην οποία συνήθως ορίζεται μόνο αν αυτές έχουν οριστεί ως //final//. Δηλώνοντας μία μεταβλητή ως //final// δηλώνουμε ότι η τιμή αυτή δεν πρόκειται και δεν μπορεί να αλλάξει. ​Για παράδειγμα η μεταβλητή numberLength δηλώνεται //final//  
-<code java>//numberLength = 7;</​code>​  +<code java> 
-θα παρατηρήσετε ότι λαμβένετε το παρακάτω μήνυμα λάθους+final int numberLength = 10; 
 +</​code>​ 
 +Αν βγάλετε τα σχόλια από την γραμμή 15 ''​numberLength = 7;'', ​θα παρατηρήσετε ότι λαμβάνετε το παρακάτω μήνυμα λάθους:
 <​code>​ <​code>​
 LocalClassExample.java:​15:​ error: cannot assign a value to final variable numberLength LocalClassExample.java:​15:​ error: cannot assign a value to final variable numberLength
Line 76: Line 75:
 </​code>​ </​code>​
  
 +Ομοίως αν προσθέσετε τους προσδιοριστές //final// στις παραμέτρους //​**phoneNumber1**//​ και //​**phoneNumber2**//​ τότε θα μπορείτε να εισάγετε την μέθοδο //​**printOriginalNumbers**//​ οι οποία χρησιμοποιεί τις μεταβλητές αυτές.
 +
 +<WRAP tip 80% center round>
 +Στην **Java 8** ή μεταγενέστερα εισάγεται η έννοια της //​effectively final// μεταβλητής. Ως //​effectively final// ορίζεται κάθε τοπική μεταβλητή της οποίας η τιμή δεν μεταβάλλεται μετά την αρχικοποίηση της.
 +</​WRAP>​
  
 +|Προηγούμενο:​ [[ :​java:​inner_classes| Μη στατικές εμφωλευμένες κλάσεις ​  ]] | Επόμενο:​ [[ :​java:​anon_inner_classes | Ανώνυμες εμφωλευμένες κλάσεις ]]|
java/local_inner_classes.1430401634.txt.gz · Last modified: 2016/02/26 11:15 (external edit)