logo

Kāpēc Java nevar atsaukties uz nestatisko mainīgo no statiskā konteksta

Kļūda Java nevar atsaukties uz nestatisko mainīgo no statiskā konteksta ar to galvenokārt saskaras iesācēji Java programmas kompilēšanas laikā. Šīs kļūdas rašanās iemesls ir tas, ka viņi izmanto nestatisku locekļa mainīgo main() metodē. Tā kā Java main() metode ir statiska metode un tā tiek izsaukta automātiski, mums nav jāizveido objekts, lai to izsauktu. Lai saprastu kļūdu, vispirms ir jāsaprot statisks un nestatisks metode Java .

Statiskā metode

In Java , publiskās metodes pieder klases gadījumam, bet, ja runājam par statiskā metode , tie pieder klasei, nevis klases instancei. Nav nepieciešams izveidot klases gadījumu, lai izsauktu statisku metodi. Statiskais elements var piekļūt tikai statisko datu dalībniekam un var mainīt tā vērtību.

Nestatiskā metode

Visas metodes bez statisks atslēgvārds pirms metodes nosaukuma tiek saukts par Nestatisks metodes. Nav nepieciešams izveidot klases gadījumu, lai piekļūtu statiskajai metodei un statiskajam mainīgajam. Nestatiskās metodes izmanto dinamisku vai izpildlaika saistīšanu. Atšķirībā no statisks metodi, mēs varam ignorēt nestatisks metodi.

Izveidosim Java programmu un ģenerēsim to pašu kļūdu.

enum tostring java

Nākamajā piemērā mēs esam deklarējuši privātu mainīgo numuru tipa int pirms main() metodes. Main() metodē mēs cenšamies palielināt skaitli par 1. Jāatzīmē, ka main() metode ir statiska metode un mainīgais nav statisks. Kad mēs apkopojam iepriekš minēto programmu, mēs saņemam to pašu kļūdu, kā mēs esam parādījuši zemāk.

StaticExample1.java

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

Izvade:

publiskā vs privātā java
Kāpēc Java nevar atsaukties uz nestatisko mainīgo no statiskā konteksta

Tagad deklarēsim mainīgo numuru kā statisku un apkopo kodu. Ņemiet vērā, ka gan mainīgais, gan main() metode ir statiski.

StaticExample2.java

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

Izvade:

Kāpēc Java nevar atsaukties uz nestatisko mainīgo no statiskā konteksta

Programma tiek apkopota un veiksmīgi darbojas.

cdr pilna forma

Katram nestatiskā mainīgā gadījumam ir atšķirīga vērtība, un tas tiek izveidots, kad operators new() inicializē objekta gadījumu. Statiskie mainīgie tiek izveidoti vai inicializēti, kad klase tiek ielādēta JVM .

Mums ir nepieciešams objekta gadījums nestatiskā mainīgā izsaukšanai. Mēs varam izveidot daudzus objektus, piešķirot šim nestatiskajam vai instances mainīgajam dažādas vērtības.

StatiskaisPiemērs3.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); } } 

Izvade:

Kāpēc Java nevar atsaukties uz nestatisko mainīgo no statiskā konteksta

Iepriekš minētajā programmā trīs objekti, var1, var2, var3 , ir izveidoti klasei mainīgs un objektiem piešķīra trīs dažādas vērtības 12, 13, 14 var1, var2 , un var3 , attiecīgi. Tagad, numuru Katra objekta īpašībai ir sava vesela skaitļa vērtība. Mēģinot palielināt skaitļa rekvizīta vērtību, izsaucot increment() metodi, kompilators nesaprot, kādai skaitļa vērtībai metodei ir jāpalielina vērtība. Kompilators saskaras ar neskaidrības kļūdu un izmet kompilēšanas laika kļūdu uz nestatisko mainīgo nevar atsaukties no statiska konteksta .

Kļūdas risinājums

Ir viens vienkāršs veids, kā atrisināt uz nestatisko mainīgo nevar atsaukties no statiskā konteksta kļūda. Iepriekš minētajā kodā mums ir jāadresē nestatiskais mainīgais ar objekta nosaukumu. Vienkāršā veidā mums ir jāizveido klases objekts, lai atsauktos uz nestatisku mainīgo no statiskā konteksta. Kad tiek izveidots jauns mainīgā gadījums, tiek izveidota jauna visu nestatisko mainīgo kopija. Tātad, mēs varam piekļūt šiem mainīgajiem, izmantojot atsauci uz jauno klases gadījumu. piemēram, apsveriet šādu Java programmu.

kā lejupielādēt youtube video vlc

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 } } 

Izvade:

Kāpēc Java nevar atsaukties uz nestatisko mainīgo no statiskā konteksta

Apraksts

Iepriekš minētajā programmā mēs piekļūstam numura rekvizītam, izmantojot klases nosaukumu statisksPiemērs. Mēs izveidojam objektu ar StaticExample klases nosaukumu pārbaude un palieliniet skaitļa vērtība izmantojot testa objektu.