logo

Kodėl nestatinio kintamojo negalima nurodyti iš statinio „Java“ konteksto

Klaida nestatinio kintamojo negalima nurodyti iš statinio konteksto Java su ja dažniausiai susiduria pradedantieji Java programos kompiliavimo metu. Šios klaidos priežastis yra ta, kad jie naudoja nestatinį nario kintamąjį main() metodu. Kadangi „Java“ pagrindinis () metodas yra statinis metodas ir jis iškviečiamas automatiškai, mums nereikia kurti objekto, kad jį iškviestume. Norėdami suprasti klaidą, pirmiausia turėtume suprasti statinis ir nestatinis metodas Java .

Statinis metodas

Į Java , viešieji metodai priklauso klasės egzemplioriui, bet jei kalbame apie statinis metodas , jie priklauso klasei, o ne klasės egzemplioriui. Norint iškviesti statinį metodą, nereikia kurti klasės egzemplioriaus. Statinis narys gali pasiekti tik statinių duomenų elementą ir gali keisti jo reikšmę.

Nestatinis metodas

Visi metodai neturint statinis raktinis žodis prieš metodo pavadinimą yra vadinamas Nestatiškas metodus. Norint pasiekti statinį metodą ir statinį kintamąjį, nereikia kurti klasės egzemplioriaus. Nestatiniai metodai naudojami dinaminiam arba vykdymo laikui įrišimui. Skirtingai nei statinis metodą, galime nepaisyti nestatinis metodas.

Sukurkime Java programą ir sugeneruokime tą pačią klaidą.

daugiagija java

Šiame pavyzdyje mes paskelbėme privatų kintamąjį numerį tipo int prieš main() metodą. Taikant main() metodą, mes bandome padidinti skaičių 1. Reikia pažymėti, kad main() metodas yra statinis metodas, o kintamasis nėra statinis. Kai kompiliuojame aukščiau pateiktą programą, gauname tą pačią klaidą, kaip parodėme toliau.

StaticExample1.java

 public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Išvestis:

kaip konvertuoti int į java eilutę
Kodėl nestatinio kintamojo negalima nurodyti iš statinio „Java“ konteksto

Dabar paskelbkime kintamąjį numerį kaip statinį ir sukompiliuokite kodą. Atminkite, kad kintamasis ir pagrindinis () metodas yra statiniai.

StaticExample2.java

 class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Išvestis:

Kodėl nestatinio kintamojo negalima nurodyti iš statinio „Java“ konteksto

Programa sukompiliuojama ir sėkmingai veikia.

Kiekvienas nestatinio kintamojo egzempliorius turi skirtingą reikšmę ir sukuriamas, kai operatorius new() inicijuoja objekto egzempliorių. Statiniai kintamieji sukuriami arba inicijuojami, kai klasė įkeliama JVM .

Mums reikia objekto egzemplioriaus, kad galėtume iškviesti nestatinį kintamąjį. Mes galime sukurti daugybę objektų, suteikdami skirtingas reikšmes tam nestatiniam arba egzemplioriaus kintamajam.

kaip vykdyti scenarijų

StaticExample3.java

 class variable { int number; public static void increment() { number++; } } class StaticExample { public static void main(String args[]) { variable var1 = new variable(); variable var2 = new variable(); variable var3 = new variable(); var1.number = 12; var2.number = 13; var3.number = 14; variable.increment(); System.out.println(var1.number); System.out.println(var2.number); System.out.println(var3.number); } } 

Išvestis:

Kodėl nestatinio kintamojo negalima nurodyti iš statinio „Java“ konteksto

Aukščiau pateiktoje programoje trys objektai, var1, var2, var3 , yra sukurti klasei kintamasis ir objektams priskyrė tris skirtingas reikšmes 12, 13, 14 var1, var2 , ir var3 , atitinkamai. Dabar, numerį kiekvieno objekto savybė turi savo sveikąjį skaičių. Kai bandome padidinti skaičiaus ypatybės vertę, iškviesdami increment() metodą, kompiliatorius nesupranta, kokiai skaičiaus reikšmei metodas turėtų padidinti reikšmę. Kompiliatorius susiduria su dviprasmiškumo klaida ir išmeta kompiliavimo laiko klaidą nestatinio kintamojo negalima nurodyti iš statinio konteksto .

Klaidos sprendimas

Yra vienas paprastas būdas išspręsti problemą nestatinio kintamojo negalima nurodyti iš statinio konteksto klaida. Aukščiau pateiktame kode turime nurodyti nestatinį kintamąjį objekto pavadinimu. Paprastu būdu turime sukurti klasės objektą, kad galėtume nurodyti nestatinį kintamąjį iš statinio konteksto. Sukūrus naują kintamojo egzempliorių sukuriama nauja visų nestatinių kintamųjų kopija. Taigi, šiuos kintamuosius galime pasiekti naudodami naujo klasės egzemplioriaus nuorodą. pavyzdžiui, apsvarstykite šią „Java“ programą.

kiek miestų JAV

StaticExample4.java

 class staticExample { int number = 0; public static void main(String args[]) { // using non-static variable by creating an object of the class staticExample test = new staticExample(); test.number++; System.out.println(test.number);a } } 

Išvestis:

Kodėl nestatinio kintamojo negalima nurodyti iš statinio „Java“ konteksto

apibūdinimas

Aukščiau pateiktoje programoje numerio ypatybę pasiekiame naudodami klasės pavadinimą statinisPavyzdys. Sukuriame StaticExample klasės pavadinimo objektą bandymas ir padidinkite skaičiaus vertė naudojant bandomąjį objektą.