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 revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
java:local_inner_classes [2016/02/15 09:59]
gthanos [Πρόσβαση στις τοπικές μεταβλητές της μεθόδου]
java:local_inner_classes [2020/03/23 09:08]
gthanos
Line 1: Line 1:
 ====== Τοπικές κλάσεις ====== ====== Τοπικές κλάσεις ======
  
-Μπορείτε να ορίσετε μία τοπική κλάση μέσα σε οποιοδήποτε μπλοκ κώδικα, δηλαδή μέσα στο σώμα μίας μεθόδου μέσα σε στα άγκυστρα ενός //if// statement ή μέσα στο σώμα μία εντολής ανακύκλωσης //for()// ή //while()//. Δείτε το παρακάτω παράδειγμα κώδικα.+<WRAP important 70% center round> 
 +===Η συγκεκριμένη ενότητα είναι προαιρετική και μπορείτε να την παραλήψετε κατά την ανάγνωση της θεωρείας του μαθήματος.=== 
 +</WRAP> 
 + 
 +Μπορείτε να ορίσετε μία κλάση μέσα σε οποιοδήποτε μπλοκ κώδικα, δηλαδή μέσα στο σώμα μίας μεθόδου μέσα σε στα άγκιστρα ενός //if// statement ή μέσα στο σώμα μία εντολής ανακύκλωσης //for()// ή //while()//Η συγκεκριμένη κατηγορία κλάσεων ονομάζεται **τοπικη κλάση**.  
 + 
 +Ο λόγος που πιθανόν θέλει κάποιος προγραμματιστής να ορίσει μία τοπική κλάση είναι ότι η λειτουργικότητα που υλοποιεί η τοπική κλάση αφορά μόνο τη συγκεκριμένη μέθοδο μέσα στην οποία δηλώνεται.  
 + 
 +Δείτε το παρακάτω παράδειγμα κώδικα.
  
 <code java LocalClassExample.java>  <code java LocalClassExample.java> 
 public class LocalClassExample { public class LocalClassExample {
      
-  String regularExpression = "[^0-9]";+  static String regularExpression = "[^0-9]";
      
-  public void validatePhoneNumber(/*final*/ String phoneNumber1,/*final*/ String phoneNumber2) {+  public static void validatePhoneNumber(String number1,String number2) {
          
     final int numberLength = 10;     final int numberLength = 10;
Line 14: Line 22:
     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 38:
       }       }
              
-//    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(number1 + "" + new PhoneNumber(number1)); 
-     +    System.out.println(number2 + "" + new PhoneNumber(number2));
-//  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(); +    LocalClassExample.validatePhoneNumber("123-456-7890", "456-7890");
-    lce.validatePhoneNumber("123-456-7890", "456-7890");+
   }   }
 } }
Line 68: Line 70:
 <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>
-Στην **Java 8** ή μεταγενέστερα εισάγεται η έννοια της //effectively final// μεταβλητής. Ως //effectively final// ορίζεται κάθε τοπική μεταβλητή της οποίας η τιμή δεν μεταβάλλεται μετά την αρχικοποίηση της.+Στην **Java 8** και μεταγενέστερα εισάγεται η έννοια της //effectively final// μεταβλητής. Ως //effectively final// ορίζεται κάθε τοπική μεταβλητή της οποίας η τιμή δεν μεταβάλλεται μετά την αρχικοποίηση της. Ο μεταγλωττιστής είναι αρκετά "έξυπνος" για να αντιληφθεί ότι η τιμή της μεταβλητής δεν μεταβάλλεται ακόμη και εάν δεν οριστεί ως //final//.
 </WRAP> </WRAP>
  
-|Προηγούμενο: [[ :java:inner_classesΜη στατικές εμφωλευμένες κλάσεις   ]] | Επόμενο: [[ :java:anon_inner_classes | Ανώνυμες εμφωλευμένες κλάσεις ]]|+|Προηγούμενο: [[ :java:inner_class_inheritance Κληρονομικότητα εσωτερικών κλάσεων  ]] | Επόμενο: [[ :java:anon_inner_classes | Ανώνυμες εμφωλευμένες κλάσεις ]]|
java/local_inner_classes.txt · Last modified: 2021/04/12 04:54 (external edit)