* Локални класове в Java
Публикувано на 14 октомври 2009 в раздел ПИК-3 Java.
“Локални” класове са тези класове, които са дефинирани вътре в програмен блок. Досега знаем как да влагаме класове като членове на даден клас. Когато говорим за локални класове, то се има в предвид клас, който е създаден в тялото на метод. На пръв поглед това е доста странно и нетипично място за дефиниране на клас.
Първото и може би най-важно нещо, което трябва да знаем за локалните класове е, че те са валидни само и единствено в програмния блок, в който са дефинирани. Можете веднага да си направите аналогия с “локални променливи”.
Ето един пример за локален клас, вложен в метод на клас “потребители”:
public class myfirstprogram{
public static void main(String[] args){
User ivan = new User("ivan", 8);
System.out.println(ivan.getUser()+" has pass "+ivan.getPass());
}
}
class User{
private String username;
private String password;
private int id;
private static int userscount = 0;
public User(String username, int len){
System.out.println("\nNew user entering...");
this.username = username;
this.setId();
this.setPass(len);
}
private void setId(){
userscount++;
this.id = userscount;
}
private void setPass(int len){
// Дефинираме локален клас "генератор на пароли"
class PassGenerator{
StringBuffer strb;
public PassGenerator(int len){
strb = new StringBuffer(len);
for (int i=0; i<len; i++){
switch((int)Math.round(Math.random()*2)){
case 0:
this.strb.append((char)((int)'0' + (int)(Math.round(Math.random()*9))));
break;
case 1:
this.strb.append((char)((int)'a' + (int)(Math.round(Math.random()*25))));
break;
case 2:
this.strb.append((char)((int)'A' + (int)(Math.round(Math.random()*25))));
break;
}
}
}
public String getpass(){
return strb.toString();
}
}
// Правим локална инстанция на този локален клас
PassGenerator p = new PassGenerator(len);
this.password = p.getpass();
}
protected String getPass(){
return this.password;
}
public int getId(){
return this.id;
}
public String getUser(){
return this.username;
}
public static void usersOnline(){
System.out.println("Users online: "+userscount);
}
}
Не можем да правим инстанция на клас “PassGenerator” некъде другаде освен вътре в метод “setPass”, където този локален клас е деклариран. По този начин казваме, че “PassGenerator е локален клас за метод setPass”.
Trackback URI | RSS за коментарите
Пусни коментар
Категории
- Бази от Данни (52)
- Вероятности (31)
- История (15)
- Кучета (69)
- Лада Нива (96)
- Математика (166)
- Методика (53)
- Общи работи (110)
- ПИК-3 Java (38)
- Политика (41)
- Програмни Среди (1)
- ПТСК (41)
- С/C++ (45)
- Семейни (16)
- Физика (35)
- ХHTML/JS (25)
- Храна (11)
Нови
- Извеждане на няколко произволни реда
- Full-Text търсене с InnoDB в MySQL
- Късметче от кафе
- Пред блока…
- Бушонно табло на Лада Нива