java:local_inner_classes

Differences

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

Link to this comparison view

Next revision
Previous revision
Next revision Both sides next revision
java:local_inner_classes [2015/04/30 13:30]
gthanos created
java:local_inner_classes [2015/04/30 13:55]
gthanos [Πρόσβαση στις τοπικές μεταβλητές της μεθόδου]
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 52: Line 58:
   }   }
 } }
 +</​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>​ </​code>​
  
-===== Πρόσβαση στα μέλη της εξωτερικής κλάσης =====+Ομοίως αν προσθέσετε τους προσδιοριστές //final// στις παραμέτρους //​**phoneNumber1**//​ και //​**phoneNumber2**//​ τότε θα μπορείτε να εισάγετε την μέθοδο //​**printOriginalNumbers**//​ οι οποία χρησιμοποιεί τις μεταβλητές αυτές.
  
-Μία ​τοπική κλάση έχει πρόσβαση στα μέλη της εξωτερικής κλάσης. Στο προηγούμενο παράδειγμα, παρατηρήστε πως ο κατασκευαστής της κλάσης //​PhoneNumber//​ έχει πρόσβαση στην μεταβλητή //​LocalClassExample.regularExpression//.+<WRAP tip 80% center round> 
 +Στην Java8 ή μεταγενέστερα ​εισάγεται η έννοια ​της ​effectively final μεταβλητής. Ως //​effectively final// ​ορίζεται κάθε τοπική μεταβλητή της οποίας η τιμή δεν μεταβάλλεται μετά την αρχικοποίηση της. 
 +</WRAP>
  
  
java/local_inner_classes.txt · Last modified: 2016/02/26 11:15 (external edit)