User Tools

Site Tools


java:local_inner_classes

Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
java:local_inner_classes [2015/04/30 13:54] – [Πρόσβαση στις τοπικές μεταβλητές της μεθόδου] gthanosjava:local_inner_classes [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
 ====== Τοπικές κλάσεις ====== ====== Τοπικές κλάσεις ======
  
-Μπορείτε να ορίσετε μία τοπική κλάση μέσα σε οποιοδήποτε μπλοκ κώδικα, δηλαδή μέσα στο σώμα μίας μεθόδου μέσα σε στα άγκυστρα ενός //if// statement ή μέσα στο σώμα μία εντολής ανακύκλωσης //for()// ή //while()//. Δείτε το παρακάτω παράδειγμα κώδικα. 
  
-<code java LocalClassExample.java>  +Μπορείτε να ορίσετε μία κλάση μέσα σε οποιοδήποτε μπλοκ κώδικα, δηλαδή μέσα στο σώμα μίας μεθόδου μέσα σε στα άγκιστρα ενός //if// statement ή μέσα στο σώμα μία εντολής ανακύκλωσης //for()// ή //while()//. Η συγκεκριμένη κατηγορία κλάσεων ονομάζεται **τοπικη κλάση**.  
-public class LocalClassExample {+ 
 +Ο λόγος που πιθανόν θέλει κάποιος προγραμματιστής να ορίσει μία τοπική κλάση είναι ότι η λειτουργικότητα που υλοποιεί η τοπική κλάση αφορά μόνο τη συγκεκριμένη μέθοδο μέσα στην οποία δηλώνεται.  
 + 
 +Δείτε το παρακάτω παράδειγμα κώδικα. 
 + 
 +<code java ValidatePhoneNumberUsingLocalClass.java>  
 +  
 +public class ValidatePhoneNumberUsingLocalClass {
      
-  String regularExpression = "[^0-9]";+  static String regularExpression = "[^0-9]";
      
-  public void validatePhoneNumber(/*final*/ String phoneNumber1,/*final*/ String phoneNumber2) {+  public static void validatePhoneNumber(String number) {
          
     final int numberLength = 10;     final int numberLength = 10;
Line 14: Line 20:
     class PhoneNumber {     class PhoneNumber {
              
-      String formattedPhoneNumber = null;+      private String formattedPhoneNumber = null;
  
       PhoneNumber(String phoneNumber){               PhoneNumber(String phoneNumber){        
         regularExpression = "[^0-9]";         regularExpression = "[^0-9]";
-        // numberLength = 7; +        String currentNumber = phoneNumber.replaceAll(
-        String currentNumber = (phoneNumber).replaceAll(+
           regularExpression, "");           regularExpression, "");
         if (currentNumber.length() == numberLength)         if (currentNumber.length() == numberLength)
Line 31: Line 36:
       }       }
              
-//    public void printOriginalNumbers() { +      public String toString() { 
-//      System.out.println("Original numbers are " + phoneNumber1 + +        if(formattedPhoneNumber == null) 
-//          " and " + phoneNumber2); +          return "Invalid number\n"; 
-//    }      +        else 
 +          return formattedPhoneNumber; 
 +      } 
 +       
 +      //    public void printOriginalNumbers() { 
 +      //      System.out.println("Original numbers are " + phoneNumber1 + 
 +      //          " and " + phoneNumber2); 
 +      //    }
     }     }
  
-    PhoneNumber myNumber1 = new PhoneNumber(phoneNumber1); +    //  myNumber1.printOriginalNumbers(); 
-    PhoneNumber myNumber2 = new PhoneNumber(phoneNumber2); +    System.out.println(number "" + new PhoneNumber(number));
-     +
-//  myNumber1.printOriginalNumbers(); +
-     +
-    if (myNumber1.getNumber() == null)  +
-      System.out.println("First number is invalid"); +
-    else +
-      System.out.println("First number is " + myNumber1.getNumber()); +
-    if (myNumber2.getNumber() == null) +
-      System.out.println("Second number is invalid"); +
-    else +
-      System.out.println("Second number is " + myNumber2.getNumber()); +
   }   }
  
   public static void main(String... args) {   public static void main(String... args) {
-    LocalClassExample lce = new LocalClassExample(); +    ValidatePhoneNumberUsingLocalClass.validatePhoneNumber("123-456-7890"); 
-    lce.validatePhoneNumber("123-456-7890""456-7890");+    ValidatePhoneNumberUsingLocalClass.validatePhoneNumber("456-7890");
   }   }
 } }
Line 68: Line 68:
 <code java> <code java>
 final int numberLength = 10; 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**// οι οποία χρησιμοποιεί τις μεταβλητές αυτές.+Αν προσθέσετε τους προσδιοριστές //final// στις παραμέτρους //**phoneNumber1**// και //**phoneNumber2**// τότε θα μπορείτε να εισάγετε την μέθοδο //**printOriginalNumbers**// οι οποία χρησιμοποιεί τις μεταβλητές αυτές.
  
 <WRAP tip 80% center round> <WRAP tip 80% center round>
-Στην Java8 ή μεταγενέστερα εισάγεται η έννοια της effectively final μεταβλητής. Ως effectively final ορίζεται κάθε τοπική μεταβλητή της οποίας η τιμή δεν μεταβάλλεται μετά την αρχικοποίηση της.+Στην **Java 8** και μεταγενέστερα εισάγεται η έννοια της //effectively final// μεταβλητής. Ως //effectively final// ορίζεται κάθε τοπική μεταβλητή της οποίας η τιμή δεν μεταβάλλεται μετά την αρχικοποίηση της. Ο μεταγλωττιστής είναι αρκετά "έξυπνος" για να αντιληφθεί ότι η τιμή της μεταβλητής δεν μεταβάλλεται ακόμη και εάν δεν οριστεί ως //final//.
 </WRAP> </WRAP>
  
 +|Προηγούμενο: [[ :java:inner_class_inheritance | Κληρονομικότητα εσωτερικών κλάσεων  ]] | Επόμενο: [[ :java:anon_inner_classes | Ανώνυμες εμφωλευμένες κλάσεις ]]|
java/local_inner_classes.1430402060.txt.gz · Last modified: 2015/04/30 12:54 (external edit)