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
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 | Ανώνυμες εμφωλευμένες κλάσεις ]]|
java/local_inner_classes.1430400641.txt.gz · Last modified: 2016/02/26 11:15 (external edit)