Lokale variabler

"Hilsen, min elskede student! Det er på tide å bli litt mer seriøs om variabler. Men denne gangen vil vi ikke diskutere deres interne struktur. I stedet vil vi fokusere på hvordan variabler samhandler med koden der de befinner seg.

"Alle variabler som er deklarert i metoder kalles lokale variabler . En lokal variabel eksisterer bare i kodeblokken den er deklarert i. Eller, for å være mer presis, den eksisterer fra øyeblikket den er deklarert til slutten av blokken av koden der den er deklarert."

"Det er klart, jeg trenger et eksempel."

"Ikke noe problem. Sånn:

Kode Variabel tilgjengelighet
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

"La oss gå gjennom reglene for tilgang til lokale variabler en gang til. Her er en kodeblokk. Hva markerer begynnelsen og slutten?"

"Krøllete regulering?"

"Riktig. Dette kan være en metodekropp, kroppen til en løkke, eller bare en kodeblokk for en betinget setning. En variabel som er deklarert i en kodeblokk eksisterer til slutten av den kodeblokken. Fortell meg hvor vil eksisterer en variabel hvis den er deklarert i kroppen til en løkke?"

"Det vil bare eksistere i løkkens kropp."

"Det stemmer. Dessuten vil det bli opprettet og ødelagt ved hver iterasjon av loopen."

"Det betyr at du ikke kan deklarere to lokale variabler med samme navn i én metode - programmet vil ikke kompilere. Men du kan gjøre dette hvis kodeblokkene der variablene er deklarert ikke overlapper. "

"Det er en grunn til at du er min favoritt, Amigo. Ta ett eksempel til for å styrke dette i hjernen din.

Kode Variabel synlighet
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 å deklarere en andre lokal variabel bare navngitt bfordi den første bvariabelen ikke er synlig i kodeblokken der den andre bvariabelen er deklarert.

Parametere

"Som vi sa før, kan hver metode ha variabler som vi kaller parametere. Hva med deres synlighet og levetid?"

"Hmm... jeg stusser..."

"Alt er ganske enkelt her. Parametre opprettes når kjøringen går inn i metoden (dvs. når koden til metoden begynner å utføres). De elimineres når metoden avsluttes."

"Med andre ord, de er synlige i hele metoden og bare der?"

"Ja. Eksempel:

Kode Variabel synlighet
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 sa tidligere, argser den bare en variabel hvis type er en rekke strenger. Og som alle parametere er den tilgjengelig overalt i metoden. Når det er sagt, ignorerer vi den vanligvis i våre eksempler.

Variabler i en klasse

"Husk leksjonene på nivå 1, hvor vi sa at en klasse kan ha metoder og variabler. Metoder kalles noen ganger forekomstmetoder, og variabler - forekomstvariabler eller felt.

"Hva er variablene (eller feltene) til en klasse ?

De er variabler som ikke er deklarert i en metode, men i en klasse."

"Og hva er de der for?"

"For det første kan de nås fra en hvilken som helst (ikke-statisk) metode i en klasse. Grovt sett er instansvariabler variabler som deles av alle metodene i en klasse.

Eksempel:

Kode Variabel synlighet
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 eksemplet har vi to metoder - add()og remove(). add()Metoden øker variablene sumog countforekomst, og remove()metoden reduserer variablene sumog count. Begge metodene fungerer på delte forekomstvariabler."

"Jeg forstår alt! Lokale variabler eksisterer mens en metode kjøres. Forekomstvariablene til en klasse eksisterer i et objekt i en klasse så lenge det objektet eksisterer."

"Godt gjort, Amigo. Vi har lagt noe grunnlag, og du vil lære detaljer om objekter i en klasse på neste nivå.

Statiske variabler

"I likhet med metoder kan variablene i en klasse være statiske eller ikke-statiske. Statiske metoder kan bare få tilgang til statiske variabler.

"Jeg har ikke en klar forståelse av statiske variabler ennå."

"Å, jeg vet, men ikke bekymre deg. For nå er det bare å bli komfortabel med dem. Bli kjent med dem. På nivå 11 vil vi analysere strukturen til statiske variabler og metoder, og du vil forstå årsakene til disse begrensninger.

"For å lage en statisk variabel (klassevariabel), må du skrive nøkkelordet statici erklæringen.

"Statiske variabler er ikke bundet til et objekt eller forekomst av klassen de er deklarert i. I stedet tilhører de selve klassen. Det er derfor de eksisterer selv om ikke et eneste objekt av klassen er opprettet . Du kan referere til dem fra andre klasser ved å bruke en konstruksjon som:

ClassName.variableName

Eksempel:

Kode Variabel synlighet
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 eksemplet ovenfor opprettet vi en egen Storageklasse, flyttet variablene countog suminn i den og erklærte dem statiske . Offentlige statiske variabler kan nås fra hvilken som helst metode i et program (og ikke bare fra en metode)."

"Jeg forstår ikke helt, men dette virker praktisk for meg."

"Så er det. Og noen ganger er det nødvendig. Uten statiske variabler og metoder ville vi sittet fast."

"Forhåpentligvis vil jeg sakte kunne finne ut av det."

"Ja, selvfølgelig vil du det."