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