CodeGym /Blog Java /Aleatoriu /Domeniul Java
John Squirrels
Nivel
San Francisco

Domeniul Java

Publicat în grup
Știm cu toții că țările au granițe și propriile lor legi. Legile țării funcționează în interiorul granițelor. Tot în țară există, de exemplu, organizații, precum școli sau muzee, care au propriile reguli locale. Ele nu contravin legilor țării, ci funcționează numai în cadrul organizației specificate. Același lucru este valabil și în programare. Deci, în programare, și în special în limbajul Java, există un termen „domeniu de aplicare”. Se referă la zonele programului în care funcționează anumite date, cum ar fi variabile sau metode. În acest articol, vom afla ce domenii sunt pentru variabilele în Java și cum să le definim.

Java Scop în general

De ce este necesar să se separe domeniile variabilelor și metodelor? Faptul este că uneori programele sunt foarte mari și poate fi dificil să urmăriți una sau alta variabilă. În plus, în proiectele mari, este de dorit o denumire clară a variabilelor, astfel încât să fie clar pentru ce sunt acestea. Scope vă permite în mod specific să aveți diferite variabile cu același nume în diferite părți ale programului. Un astfel de cod este mai ușor de întreținut și citit. Sfera Java definește locul în care o anumită variabilă sau metodă este accesibilă într-un program. Scurt:
  • O variabilă declarată într-o metodă este vizibilă de la începutul declarației până la sfârșitul metodei (sfera metodei).
  • O variabilă declarată într-un bloc de cod există până la sfârșitul acelui bloc de cod.
  • Variabilele care sunt argumente de metodă există până la sfârșitul metodei.
  • Variabilele de clasă/obiect există pe durata de viață a obiectului care le conține. Vizibilitatea lor este reglementată de modificatori speciali de acces.
  • Variabilele de clasă statice există tot timpul în care programul rulează. Vizibilitatea lor este determinată și de modificatorii de acces.

Domeniul de aplicare al metodei

Orice variabilă declarată într-o metodă, inclusiv argumentele, nu este accesibilă în afara acelei metode. Toate variabilele declarate în cadrul metodelor sunt vizibile de la începutul declarației lor până la sfârșitul metodei. Iată un exemplu de domeniu de aplicare a variabilei metodei:

public class JScopeTest1 {


   public static void main(String[] args) {

       System.out.println(myMethod(5));
       System.out.println(myMethod(17));

   }
   public static int  myMethod(int arg) {
       int secondArg = 100; //local method variable
       return secondArg + arg;
   }
}
Aici avem secondArg , o variabilă locală sau un argument de metodă. Nu putem folosi această variabilă în afara metodei myMethod sau înainte de a fi declarată. Dacă o variabilă este un argument de funcție, atunci este vizibilă în întregul corp al acestei metode. În exemplul de mai sus avem două astfel de argumente: arg în myMethod și args în metoda principal.

Domeniul de aplicare la nivel de clasă

Domeniu de aplicare la nivel de clasă (variabile de instanță) — orice variabilă declarată într-o clasă este disponibilă pentru toate metodele acelei clase. În funcție de modificatorul său de acces (adică public sau privat), poate fi uneori accesat în afara clasei. Deci, dacă o variabilă este o variabilă de clasă, atunci este legată de un anumit obiect și există atâta timp cât există un obiect din această clasă. Dacă nu există niciun obiect, atunci nu există nicio copie a variabilei. Variabila este vizibilă din toate metodele clasei, indiferent dacă sunt declarate înainte sau după ea. Fiecare obiect are propria sa variabilă independentă de alte obiecte. Accesul la o variabilă din metode statice nu este posibil.

Exemplu de cod


public class Student {
   
//class level variables
   public String surname;
   String name;
   String secondName;
   private Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

   @Override
   public int hashCode(){
       //TODO: check for nulls
       //return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());
       return (surname + name + secondName + birthday).hashCode();
   }
   @Override
   public boolean equals(Object other_) {
       Student other = (Student)other_;
       return (surname == null || surname.equals(other.surname) )
               && (name == null || name.equals(other.name))
               && (secondName == null || secondName.equals(other.secondName))
               && (birthday == null || birthday.equals(other.birthday));
   }
}
Nume , nume , secondName și ziua de naștere sunt variabile de instanță.

Domeniul blocului

Dacă o variabilă este definită/declarată într-un anumit bloc de cod, atunci ea există până la sfârșitul acelui bloc de cod. De obicei, astfel de variabile există între acoladele în care sunt definite. Foarte des, domeniul de aplicare al blocului poate fi o variabilă de buclă. O variabilă care este declarată într-o condiție de buclă for nu este accesibilă în afara buclei, cu excepția cazului în care ați definit-o în prealabil.

public class JScopeTest2 {
   public static void main(String[] args) {
       for (int i = 0; i < 10; i++) {
           int sum = 0;
           sum = sum + i;
       }
      
       int sum = 1;
       System.out.println(sum);
   }
}
Atât prima sumă, cât și variabilele i sunt declarate în interiorul buclei și nu există în afara acestei bucle. Cu toate acestea, a doua sumă a fost declarată în afara buclei, astfel încât această variabilă particulară va fi tipărită.

Variabile statice

Dacă o variabilă este declarată ca static (marcată cu cuvântul cheie static), atunci ea există atâta timp cât există clasa sa. De obicei, JVM-ul încarcă o clasă în memorie la prima utilizare, când variabilele statice sunt inițializate.

import java.util.Date;

public class Student {
   public static int today = 2022;
   String surname;
   String name;
   String secondName;
   Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

 
   public static void main(String[] args) {
       System.out.println(today);
   }

}
Nu ar trebui să creați o nouă instanță a clasei Student pentru a utiliza variabila statică astăzi . Aici va fi tipărit „2022”.

Modificatori de acces

Java are 4 modificatori de acces pentru a restricționa accesul la metodă sau variabilă. Le puteți folosi în cadrul claselor, nu în cadrul metodelor.
  • privat este cel mai restrictiv modificator. Limitează accesul la metode și variabile la clasa în care au fost declarate. Dacă nu este nevoie să folosiți anumite metode sau variabile în afara clasei, utilizați private. Variabilele de clasă sunt de obicei private în Java.

  • Dacă nu este specificat niciun modificator de acces, metoda sau variabila va accepta modificatorul implicit . implicit permite accesul numai din pachetul curent.

  • modificatorul protejat permite accesul la o metodă sau variabilă numai din pachetul curent, cu excepția cazului în care este accesat printr-o clasă copil din afara pachetului.

  • public este cel mai puțin restrictiv modificator. Vă permite să accesați o clasă, metodă sau variabilă nu numai din clasa în care sunt declarate, ci și din exterior. Acest modificator este folosit foarte des.

Comentarii
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION