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:30]
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:
       }       }
       ​       ​
 +//    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**//​. Μία τοπική κλάση έχει πρόσβαση στα μέλη της εξωτερικής κλάσης. Στο προηγούμενο παράδειγμα,​ παρατηρήστε πως ο κατασκευαστής της κλάσης //​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>​
 +
 +Ομοίως αν προσθέσετε τους προσδιοριστές //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)