2016-05-12 13 views
0

Ich versuche, eine rekursive Methode (Funktion) zu erstellen. Diese Methode behandelt Objekte einer anderen Klasse, wobei jede Instanz 3 Integer-Felder hat. (Integer var1, var2, var3;). Ich habe mich gefragt, ob es eine Ausnahme oder einen Fehler von "Variable wurde möglicherweise nicht initialisiert" gibt, in diesem Fall wird die Methode gestoppt. Zuerst dachte ich, es würde nullPointerException werfen, weil es ein Objekt ist, aber das Auspacken funktioniert automatisch. Gibt es eine Lösung? (Ich weiß, das ist ein Kompilierungsfehler ...)Java: Catch-Ausnahme der Variablen wurde möglicherweise nicht initialisiert

+0

Ihre Frage ergibt keinen Sinn. Felder werden standardmäßig auf null initialisiert (wenn es sich um Referenztypen handelt); Sie sollten also keinen Kompilierungsfehler von dem erhalten, was Sie beschreiben. (Die Variablen-möglicherweise-nicht-initialisierten Kompilierungsfehler sind nur für lokale Variablen und endgültige Felder.) Können Sie Ihren tatsächlichen Code posten? – ruakh

+0

Ein einfaches Beispiel: Klassenarbeit { \t public static void main (String args []) { \t \t Integer x; \t \t System.out.println (x); \t} \t } Klassenarbeit { \t public static void main (String args []) { \t \t Integer x = null; \t \t System.out.println (x); } \t \t } Ausgang 1: test.java: 5: Fehler: Variable x kann \t \t System.out.printin (x) nicht initialisiert worden sind; \t \t^ 1 Fehler Ausgang 2: null – JAAAY

+0

Ich glaube, er in einen Compiler-Fehler ausgeführt wird, weil der Parameter (s) er nicht initialisiert vorbei ist, ist, und er versucht, dass die Compiler-Fehler mit einem try/catch zu umgehen. – Jayson

Antwort

0

Eine Möglichkeit besteht darin, vor der Verwendung zu überprüfen, ob es sich um eine Instanz des Klassentyps handelt oder nicht. Betrachten Sie folgendes:

Integer x = null; 
Integer y = new Integer(0); 

if(x instanceof Integer) 
    System.out.println("x is initialized."); 
else 
    System.out.println("x is NOT initialized."); 

if(y instanceof Integer) 
    System.out.println("y is initialized."); 
else 
    System.out.println("y is NOT initialized."); 

Der Ausgang führt:

x ist nicht initialisiert.

y ist initialisiert.

0

Sie können alle drei Variablen mit Dummy/temporären Werten im äußeren Bereich dieser Methode initialisieren und sie dann mit dem überschreiben, was an Ihre Methode übergeben wird. Beispiel:

Integer myVar1 = 0; 
Integer myVar2 = 0; 
Integer myVar3 = 0; 
public static void yourMethod(Integer var1, Integer var2, Integer var3) { 
    try { 
    myVar1 = var1; 
    myVar2 = var2; 
    myVar3 = var3; 
    ... your code 
    catch(NullPointerException ex) { 
    // handling error code 
    } 
} 
+0

Verwenden Sie 'new Integer()' nur, wenn Sie eindeutige Referenzen benötigen. – shmosel

+0

@Jayson Aber wie eine Ausnahme dann zu fangen? – JAAAY

+0

Sie würden Ihren Code einfach in einen Versuch fangen. Ich denke, Sie verwirren, welche Art von Fehler Sie erwarten, wenn diese Variablen nicht an anderer Stelle initialisiert werden.Wenn sie nie initialisiert werden, erhalten Sie einen Kompilierungsfehler, aber wenn Sie eine Null übergeben und Sie versuchen, damit umzugehen, werden Sie einen anderen Fehler, z. ein Nullzeiger. also können Sie Dinge wie var1.intValue() nicht tun; – Jayson

Verwandte Themen