“Variabile non statica non può essere referenziata da un contesto statico” durante la creazione di un object

Ho scritto il codice seguente per testare il concetto di classi e oggetti in Java.

public class ShowBike { private class Bicycle { public int gear = 0; public Bicycle(int v) { gear = v; } } public static void main() { Bicycle bike = new Bicycle(5); System.out.println(bike.gear); } } 

Perché questo mi dà l’errore seguente nel processo di compilazione?

 ShowBike.java:12: non-static variable this cannot be referenced from a static context Bicycle bike = new Bicycle(5); ^ 

Rendi statico ShowBike.Bicycle .

 public class ShowBike { private static class Bicycle { public int gear = 0; public Bicycle(int v) { gear = v; } } public static void main() { Bicycle bike = new Bicycle(5); System.out.println(bike.gear); } } 

In Java esistono due tipi di classi nidificate : “Classe nidificata statica” e “Classe interna” . Senza la parola chiave static è una class interna e avrai bisogno di un’istanza di ShowBike per accedere a ShowBike.Bicycle :

 ShowBike showBike = new ShowBike(); Bicycle bike = showBike.new Bicycle(5); 

Le classi nidificate statiche e le classi normali (non annidate) sono quasi le stesse nella funzionalità, sono solo diversi modi per raggruppare le cose. Tuttavia, quando si utilizzano classi nidificate statiche, non è ansible inserire le definizioni in file separati, il che porterà a un singolo file contenente molte definizioni di class.

Bicycle è una class interna, quindi è necessaria un’istanza di class esterna per creare un’istanza di class interna come:

 ShowBike sBike = new ShowBike(); Bicycle bike = sBike.new Bicycle(5); 

Oppure puoi semplicemente dichiarare static Bicycle come static per far funzionare il tuo modo attuale.

Il metodo principale non può accedere ad un membro non statico della sua class.

A proposito, le classi dovrebbero essere chiamate come nomi, non come verbi. Quindi un modo migliore per farlo è:

 private class Bicycle { public int gear = 0; public Bicycle(int v) { gear = v; } public void showGear() { System.out.println(gear); } public static void main(String[] args) { Bicycle bike = new Bicycle(6); bike.showGear(); // Notice that the method is named after a verb } } 

È necessario creare l’istanza dell’object class esterna della class interna. o hai bisogno di rendere la class interiore statica. quindi per la class interna non è richiesto alcun object.

La tua class Bicycle non è statica e pertanto non può essere utilizzata in un metodo non statico. Se vuoi usarlo nel metodo principale, cambialo in

 private static class Bicycle