Lokale variable

"Hilsen, min elskede studerende! Det er tid til at blive lidt mere seriøs omkring variabler. Men denne gang vil vi ikke diskutere deres interne struktur. I stedet vil vi fokusere på, hvordan variabler interagerer med koden, hvor de er placeret.

"Alle variabler, der er erklæret inde i metoder, kaldes lokale variabler . En lokal variabel eksisterer kun i den kodeblok, hvori den er erklæret. Eller, for at være mere præcis, eksisterer den fra det øjeblik, den er erklæret, indtil slutningen af ​​blokken kode, hvori det er deklareret."

"Det er klart, jeg har brug for et eksempel."

"Intet problem. Her er det:

Kode Variabel tilgængelighed
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}


a
a
a
a, b
a, b
a, b
a, b, x
a, b, x
a, b
a, b
a
a

"Lad os gennemgå reglerne for adgang til lokale variabler en gang til. Her er en kodeblok. Hvad markerer dens begyndelse og slutning?"

"Krøllede seler?"

"Korrekt. Dette kunne være en metode, kroppen af ​​en løkke eller bare en kodeblok for en betinget sætning. En variabel, der er erklæret i en kodeblok, eksisterer indtil slutningen af ​​den kodeblok. Fortæl mig, hvor vil eksisterer en variabel, hvis den er erklæret i en løkkes brødtekst?"

"Det vil kun eksistere i løkkens krop."

"Det er rigtigt. Hvad mere er, det vil blive skabt og ødelagt ved hver iteration af loopet."

"Det betyder, at du ikke kan erklære to lokale variabler med samme navn i én metode - programmet vil ikke kompilere. Men du kan gøre dette, hvis kodeblokkene, hvor variablerne er erklæret, ikke overlapper. "

"Der er en grund til, at du er min favorit, Amigo. Tag et eksempel mere for at størkne dette i din hjerne.

Kode Variabel synlighed
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     System.out.println(b);
   }

   if (a < 20)
   {
     int b = 20;
     System.out.println(b);
   }
}


a
a
a
a, b
a, b
a
a
a
a
a, b
a, b
a

"Vi var i stand til at erklære en anden lokal variabel kun navngivet, bfordi den første bvariabel ikke er synlig i kodeblokken, hvor den anden bvariabel er erklæret.

Parametre

"Som vi sagde før, kan hver metode have variabler, som vi kalder parametre. Hvad med deres synlighed og levetid?"

"Hmm... jeg er forbløffet..."

"Alt er ret simpelt her. Parametre oprettes, når eksekveringen træder ind i metoden (dvs. når metodens kode begynder at udføre). De elimineres, når metoden slutter."

"Med andre ord er de synlige i hele metodens krop og kun der?"

"Ja. Eksempel:

Kode Variabel synlighed
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}

args
args, a
args, a
args, a
args, a, b
args, a, b
args, a, b
args, a, b, x
args, a, b, x
args, a, b
args, a, b
args, a
args, a

"Som vi sagde tidligere, argser den kun en variabel, hvis type er en række strenge. Og som alle parametre er den tilgængelig overalt i metodens krop. Når det er sagt, ignorerer vi det normalt i vores eksempler.

Variabler i en klasse

"Husk lektionerne på niveau 1, hvor vi sagde, at en klasse kan have metoder og variabler. Metoder kaldes nogle gange instansmetoder og variabler - instansvariabler eller felter.

"Hvad er variablerne (eller felterne) i en klasse ?

De er variabler, der ikke er deklareret i en metode, men i en klasse."

"Og hvad er de der for?"

"Til at begynde med kan de tilgås fra enhver (ikke-statisk) metode i en klasse. Groft sagt er instansvariabler variabler, der deles af alle metoderne i en klasse.

Eksempel:

Kode Variabel synlighed
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     count++;
   }

   public void remove(int data)
   {
     sum = sum - data;
     count--;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum

"I dette eksempel har vi to metoder - add()og remove(). add()Metoden inkrementerer sumog countinstansvariablerne, og remove()metoden reducerer variablerne sumog count. Begge metoder virker på delte instansvariabler."

"Jeg forstår det hele! Lokale variabler eksisterer, mens en metode udføres. Forekomstvariablerne for en klasse eksisterer i et objekt i en klasse, så længe det objekt eksisterer."

"Godt klaret, Amigo. Vi har lagt noget fundament, og du vil lære detaljer om objekter i en klasse på det næste niveau.

Statiske variable

"Ligesom metoder kan variablerne i en klasse være statiske eller ikke-statiske. Statiske metoder kan kun få adgang til statiske variable.

"Jeg har ikke en klar forståelse af statiske variabler endnu."

"Åh, jeg ved det, men bare rolig. For nu skal du bare blive fortrolig med dem. Bliv fortrolig med dem. På niveau 11 vil vi analysere strukturen af ​​statiske variabler og metoder, og du vil forstå årsagerne til disse restriktioner.

"For at lave en statisk variabel (klassevariabel), skal du skrive nøgleordet statici dets erklæring.

"Statiske variable er ikke bundet til et objekt eller en instans af klassen, som de er erklæret i. I stedet tilhører de selve klassen. Det er derfor, de eksisterer, selvom der ikke er oprettet et eneste objekt af klassen . Du kan henvise til dem fra andre klasser ved hjælp af en konstruktion som:

ClassName.variableName

Eksempel:

Kode Variabel synlighed
public class Solution
{
   public void add(int data)
   {
     Storage.sum = Storage.sum + data;
     Storage.count++;
   }

   public void remove(int data)
   {
     Storage.sum = Storage.sum - data;
     Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}

Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum



Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum

"I ovenstående eksempel oprettede vi en separat Storageklasse, flyttede variablerne countog sumind i den og erklærede dem statiske . Offentlige statiske variabler kan tilgås fra enhver metode i et program (og ikke kun fra en metode)."

"Jeg forstår det ikke helt, men det virker bekvemt for mig."

"Så det er det. Og nogle gange er det nødvendigt. Uden statiske variabler og metoder ville vi sidde fast."

"Forhåbentlig vil jeg langsomt være i stand til at finde ud af det."

"Ja, selvfølgelig vil du det."