PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Java - wie feststellen, ob die Klasse bereits initialisiert wurde?


darph
2005-04-20, 22:19:20
gibt es unter Java sowas wie exists() oder isset()?


switch (inputTokens[0].charAt(0)) {

case COM_QUI:
myLoop = false;
break;

case COM_NEW:
SearchText myTextObject = new SearchText(inputTokens[1]);
break;

case COM_SRC:
SearchWord myWordObject = new SearchWord(inputTokens[1]);
output = myTextObject.performSearch(myWordObject);
break;

}

In diesem Fall meckert er mir an, myTextObject könnte noch nicht initialisiert worden sein, wenn COM_SRC vor COM_NEW ausgeführt wird (ist eine kleine Shell für das Programm).

Nur wie kann ich jetzt feststellen, ob es myTextObject schon gibt?

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The local variable myTextObject may not have been initialized

at kmpSearch.Shell.main(Shell.java:57) :(

Gast
2005-04-20, 22:30:56
gibt es unter Java sowas wie exists() oder isset()?


switch (inputTokens[0].charAt(0)) {

case COM_QUI:
myLoop = false;
break;

case COM_NEW:
SearchText myTextObject = new SearchText(inputTokens[1]);
break;

case COM_SRC:
SearchWord myWordObject = new SearchWord(inputTokens[1]);
output = myTextObject.performSearch(myWordObject);
break;

}

In diesem Fall meckert er mir an, myTextObject könnte noch nicht initialisiert worden sein, wenn COM_SRC vor COM_NEW ausgeführt wird (ist eine kleine Shell für das Programm).

Nur wie kann ich jetzt feststellen, ob es myTextObject schon gibt?

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The local variable myTextObject may not have been initialized

at kmpSearch.Shell.main(Shell.java:57) :(

Ähmm, bin kein Java Fachmann - aber gegen null prüfen - also sowas wie object != null ?? Müsste doch Java können ....

Wuzel
2005-04-20, 22:31:42
Ähmm, bin kein Java Fachmann - aber gegen null prüfen - also sowas wie object != null ?? Müsste doch Java können ....

Das war ich ;(

Aqualon
2005-04-20, 23:08:38
if (myTextObject != null) {
//machwas...
} else {
//machwasanderes...
}

Aqua

darph
2005-04-20, 23:41:56
if (myTextObject != null) {
//machwas...
} else {
//machwasanderes...
}

Aqua
Hat Eclipse immer noch angemeckert.

Egal. Hab's anders gelöst, danke :)

HellHorse
2005-04-20, 23:57:04
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/ClassLoader.html#findLoadedClass(java.lang.String)
aber wenn zu diesem Zeitpunkt die Klasse weder geladen noch intialisiert wird, lief etwas extrem falsch. Das einzige was ich mir vorstellen kann, ist dass der verwendete ClassLoader Müll gebaut hat, oder das zwei Klassen gegenseitig sich im static initializer benötigen.
Kann nämlich eine Klasse nicht geladen werden, muss eine Exception geworfen werden.
http://java.sun.com/docs/books/jls/second_edition/html/execution.doc.html#47907

Mom, noch mal gelesen:
Dein Problem ist etwas anderes. Dein Code compilierte nicht, weil du eine variable zu einem Zeitpunk referenzierst hast, an dem sie ev noch nicht initalisiert ist (statisch, im Quelltext, nicht zur Laufzeit). Und du wolltest den Code dann trotzdem aussführen.
Dein Problem hat nix mit Klassen zu tun.

darph
2005-04-21, 00:04:01
Mom, noch mal gelesen:
Dein Problem ist etwas anderes. Dein Code compilierte nicht, weil du eine variable zu einem Zeitpunk referenzierst hast, an dem sie ev noch nicht initalisiert ist (statisch, im Quelltext, nicht zur Laufzeit). Und du wolltest den Code dann trotzdem aussführen.
Genau. ;(

Hab's jetzt einfach quick'n dirty gemacht.

public class Shell {

private static final char COM_NEW = 'n';
private static final char COM_SRC = 's';
private static final char COM_HEL = 'h';
private static final char COM_QUI = 'q';

public static void main(String[] args) throws IOException {

String output = "";
String SearchTextString = "";
final String PROMPT = "KMP> ";
boolean myLoop = true;
String[] inputTokens;


while (myLoop) {
System.out.print(PROMPT);

BufferedReader in = new BufferedReader(
new InputStreamReader(System.in));
String inputString = in.readLine();
inputTokens = myTokenizer(inputString);

switch (inputTokens[0].charAt(0)) {

case COM_QUI:
myLoop = false;
break;

case COM_NEW:
if(inputTokens.length != 2) {
System.out.println("Error! Incorrect number of parameters!");
} else {
SearchTextString = inputTokens[1];
}
break;

case COM_SRC:
if (SearchTextString == "") {
System.out.println("Error! No text specified!");
} else {
if(inputTokens.length != 2) {
System.out.println("Error! Incorrect number of parameters!");
} else {
SearchWord myWordObject = new SearchWord(inputTokens[1]);
SearchText myTextObject = new SearchText(SearchTextString);
output = myTextObject.performSearch(myWordObject);

if (output == "") {
System.out.println("Not Found");
} else {
System.out.println("Found at: " + output);
}
}
}
break;

case COM_HEL:
System.out.println("Hilfe!");
break;

default:
System.out.println("Error! Unknown command!");
}
}
}

HellHorse
2005-04-21, 00:09:50
if (SearchTextString == "")
if (output == "")
mach das ganz schnell weg

darph
2005-04-21, 00:19:20
if (SearchTextString == "")
if (output == "")
mach das ganz schnell weg
wie sonst?

RoKo
2005-04-21, 01:11:06
wie sonst?
if (SearchTextString.equals(""))

== vergleicht sozusagen die Speicheradresse des Objekts und nicht das Objekt selbst.

Und ansonsten:

SearchText myTextObject = null;
switch (inputTokens[0].charAt(0)) {

case COM_QUI:
myLoop = false;
break;

case COM_NEW:
myTextObject = new SearchText(inputTokens[1]);
break;

case COM_SRC:
SearchWord myWordObject = new SearchWord(inputTokens[1]);
if (myTextObject != null) output = myTextObject.performSearch(myWordObject);
break;

}

clm[k1]
2005-04-21, 08:40:27
Ich würde an deiner stelle vor der switch-anweisung noch prüfen, ob inputTokens sowie die jeweiligen strings die drinne sind länger als 1 sind - wenn da nämlich mal zufällig ein leerer string drinne steht, schmeist der dir sonst ne arrayOutOfBounds-exception bei charAt()

Alternativ kannst du das ganze natürlich auch in einen try-catch block packen!


just my 2 cent
clm[k1]

darph
2005-04-21, 10:34:03
if (SearchTextString.equals(""))

== vergleicht sozusagen die Speicheradresse des Objekts und nicht das Objekt selbst.

Oh, eh ja X-D da war ja was. ;(


']arrayOutOfBounds-exception bei charAt()
Öh.. Tatsache... :eek: Danke!

Gast
2010-10-27, 12:13:37
Ich vermute, dass Initialisierung der Klasse wirft eine NullException. Fang es einfach mit "try-catch" !

try{
// hier problemZeile platzieren
}catch (Exception){
// und hier was im Exceptionfall machen soll
}finally{
// und hier was unbedingt passieren soll
}

Pinoccio
2010-10-27, 12:17:34
Oh, eh ja X-D da war ja was. ;(Ungünstig für JAVA-Anfänger: bei Strings geht es trotzdem (i. S. v. der Vergleich funktioniert). :-(

mfg

Senior Sanchez
2010-10-27, 12:30:57
Ich glaube, dass das ein Rekord ist: Einen 5 Jahre alten Thread ausgegraben der dann eigentlich auch noch komplett geklärt war. :D

darph
2010-10-27, 15:07:44
Ach du Scheiße, was für Jugendsünden. Macht das schnell weg ;(

Pinoccio
2010-10-27, 16:11:49
Ich glaube, dass das ein Rekord ist: Einen 5 Jahre alten Thread ausgegraben der dann eigentlich auch noch komplett geklärt war. :DNa und?! Es geht ja immernoch. ;DAch du Scheiße, was für Jugendsünden. Macht das schnell weg ;(Du bist der Mod. ><

mfg

dogmeat
2010-10-28, 18:17:18
Weiß jetzt nicht ob ich an das denke was du meintest, aber ich erstelle immer in der Klasse eine static Variable von der gleichen Klasse und prüfe diese auf Null.

Edit: Scheisse, erst jetzt Date gesehen. FUU