java: Nicht-statische Variable kann nicht von einem statischen Kontext-Fehler referenziert werden

8

Der folgende Code erzeugt einen Fehler in der Variable con2 say "non-static variable con2 cannot be referenced from a static context Error." I, die ich für eine Lösung googelte, und sie legen nahe, dass die Variable noch nicht initialisiert wurde, um die Methoden verfügbar zu machen. Initialisiere ich das falsch? Ich habe auch versucht, Dinge öffentlich zu machen, aber das hat auch nicht geholfen.

%Vor%     
phill 29.05.2009, 16:10
quelle

6 Antworten

10

Nein, Sie müssen das Feld con2 statisch deklarieren:

%Vor%

Bearbeiten: Korrektur, das wird nicht ausreichen, Sie werden das gleiche Problem bekommen, weil Ihre Methode getConnection2Url auch nicht statisch ist. Eine bessere Lösung könnte stattdessen die folgende Änderung sein:

%Vor%     
waxwing 29.05.2009, 16:11
quelle
13

Wahrscheinlich möchten Sie der Deklaration von con2 "statisch" hinzufügen.

In Java können Dinge (sowohl Variablen als auch Methoden) Eigenschaften der Klasse sein (was bedeutet, dass sie von allen Objekten dieses Typs gemeinsam genutzt werden), oder sie können Eigenschaften des Objekts sein (eine andere in jedem Objekt von die selbe Klasse). Das Schlüsselwort "static" wird verwendet, um anzuzeigen, dass etwas eine Eigenschaft der Klasse ist.

"Static" Zeug ist die ganze Zeit vorhanden. Die anderen Sachen existieren nur, nachdem Sie ein Objekt erstellt haben, und selbst dann hat jedes einzelne Objekt seine eigene Kopie der Sache. Und die Kehrseite davon ist in diesem Fall der Schlüssel: Statische Gegenstände können nicht auf nicht-statische Gegenstände zugreifen, weil sie nicht wissen, in welches Objekt sie hineinschauen sollen. Wenn Sie eine Objekt-Referenz übergeben, kann sie Dinge wie "Ding" machen .con2 ", aber einfach" con2 "zu sagen ist nicht erlaubt, weil Sie nicht gesagt haben, welches Objekt con2 gemeint ist.

    
jackr 29.05.2009 16:17
quelle
6

Java hat zwei Arten von Variablen

a)
Klassenstufe (Statisch):
     Sie sind eins pro Klasse. Sagen Sie, dass Sie eine Schülerklasse haben und Name als statische Variable definiert haben. Nun, egal wie viele Schülerobjekte Sie erstellen, alle haben denselben Namen.

Objekt Ebene:
     Sie gehören zu jedem Objekt. Wenn der Name nicht statisch ist, können alle Schüler einen anderen Namen haben.

b)
Klassenstufe:
      Diese Variablen werden beim Laden der Klasse initialisiert. Auch wenn kein Schülerobjekt erstellt wurde, können Sie dennoch auf die statische Namensvariable zugreifen und diese verwenden.   

Objekt Ebene:       Sie werden initialisiert, wenn Sie ein neues Objekt erstellen, zB new ();  

C)
Ihr Problem : Ihre Klasse ist Just in JVM geladen und Sie haben ihre Hauptmethode (static) aufgerufen: Legally erlaubt.

Nun wollen Sie ein Object varibale aufrufen: Wo ist das Objekt ??

Sie müssen ein Objekt erstellen, und nur Sie können auf Variablen auf Objektebene zugreifen.

    
Khangharoth 29.05.2009 16:52
quelle
5

Ihre main () -Methode ist statisch, verweist jedoch auf zwei nicht statische Member: con2 und getConnectionUrl2 (). Sie müssen eines von drei Dingen tun:

1) Machen Sie con2 und getConnectionUrl2 () statisch.

2) Erstellen Sie in main () eine Instanz der Klasse testconnect und greifen Sie auf con2 und getConnectionUrl2 () zu.

3) Brechen Sie eine andere Klasse aus, um con2 und getConnectionUrl2 () zu halten, so dass testconnect nur main enthält. Es muss immer noch die andere Klasse instanziieren und die Methoden davon aufrufen.

Option # 3 ist die beste Option. # 1 ist das Schlimmste.

Sie können jedoch nicht auf statische Elemente innerhalb einer statischen Methode zugreifen.

    
Clint Miller 29.05.2009 16:15
quelle
2

Die einfachste Änderung wäre etwa so:

%Vor%     
Ron 29.05.2009 16:37
quelle
0

Dies ist eine interessante Frage, ich möchte nur einen weiteren Aspekt angeben, indem ich ein wenig mehr Informationen hinzufüge. Sie können verstehen, warum eine Ausnahme ausgelöst wird, wenn Sie sehen, wie statische Methoden funktionieren. Diese Methoden können entweder statische Daten, lokale Daten oder Daten, die als Parameter an sie gesendet werden, manipulieren. weil auf die statische Methode von jedem beliebigen Objekt aus zugegriffen werden kann. Es kann also zu Sicherheitsproblemen kommen, oder es können Datenlecks auftreten, wenn Instanzvariablen verwendet werden können. Daher muss der Compiler einen solchen Fall außer Acht lassen.

    
JavaUSer 05.12.2011 17:29
quelle

Tags und Links