Noch son Nullpointer Ding!
-
public class A { private String[] s; public A() { String[] s = new String[6]; } public void Set() { for ( int i=0; i<6; i++ ) s [i] = new String ( "hello" ); } } public class Main { public static void main( String[] args ) { A a = new A(); a.Set(); } }
Hi!
Obiges gibt wieder ne java.lang.NullPointerException. Es wird über die Zeile 11 und 19 gemeckert. Wo steckt der Wurm dieses mal?
-
Beachte die Warnungen des Compilers! Im Konstruktor legst du eine neue lokale Variable s vom Typ String[] an und weist ihr ein neues Array zu. Mit dem gleichnamigen private-Field s hat diese Variable allerdings nichts zu tun. Das private-Field bleibt null.
MfG SideWinder
-
Oh mann, ich Blindfisch! Klar, hast Recht. Der Compiler hat aber seltsamer weise nicht gewarnt.
-
noch so nebenbei. Nach Konvention sollten Methodennamen mit Kleinbuchstaben beginnen: also set(...)
-
java newbie schrieb:
Der Compiler hat aber seltsamer weise nicht gewarnt.
Warum sollte er auch. Was du gemacht hast ist vollkommen legal
-
Javaner schrieb:
java newbie schrieb:
Der Compiler hat aber seltsamer weise nicht gewarnt.
Warum sollte er auch. Was du gemacht hast ist vollkommen legal
Es sollte ein "unused variable s" kommen...
-
Shade Of Mine schrieb:
Javaner schrieb:
java newbie schrieb:
Der Compiler hat aber seltsamer weise nicht gewarnt.
Warum sollte er auch. Was du gemacht hast ist vollkommen legal
Es sollte ein "unused variable s" kommen...
Wieso das denn? Die Variable wurde doch benutzt
-
Javaner schrieb:
Wieso das denn? Die Variable wurde doch benutzt
wo denn?
-
Hint: Es gibt bei "Benutzung" einen Unterschied zwischen Lesen und Schreiben.
Die Variable wird zugewiesen, aber ihr Wert wird nie verändert
vs.
Verwendung einer nicht zugewiesenen Variablen
Also wird s nicht "benutzt", im Sinne von "ihr Inhalt ausgewertet".