main Methode und String

NC10

Mitglied
Kurze einfache vielleicht blöde Frage: Warum lösst sich folgender Code nicht ausführen?

public class Text
{
public static void main (String[] args) {
String text="ABC"; //*1*
System.out.println(text.length());
}
}

da kommt immmer folgende Fehlermeldung: compilieren mit javac Text.java funktioniert noch!

Caused by: java.lang.ClassNotFoundException: Text.java
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: Text.java. Program will exit.

Vielen Dank für Hilfe!!!
 
> java Test
statt
> java Test.java
eintippen

wenn überhaupt ginge es ja nun um die .class-Datei, .java hat überhaupt nix mehr zu melden,
aber .class muss man weglassen, machen viele falsch
 
Funktioniert bei mir ohne probleme ...

kann es sein das deine Klasse umbenannt hast und deshalb die Exception kommt ??
 
Hallo,

also ich hätte da nochmal ne Fragen: Bei meiner Frage ging es um eine Übungsaufgabe, die folgendermaßen lautet:
Gegeben ist folgender Code:
Code:
public class Text {
public static void main(String[] args) {
String text;
// *1*
text = null;
// *2*
text = "";
// *3*
text = "ABC";
// *4*
}
}

Frage ist: welchen Wert der Ausdruck text.length() an den Stellen der Kommentare hat.
Ich wollte mir helfen in dem ich an den Stellen System.out.println(text.length()); eingefügt habe, um mir den Wert auszugeben, und dann zu erklären warum.
Also so:
Code:
public class Text {
public static void main(String[] args) {
String text;
System.out.println(text.length());// *1*
text = null;
System.out.println(text.length());// *2*
text = "";
System.out.println(text.length());// *3*
text = "ABC";
System.out.println(text.length());// *4*
}
}

Das ist ja so nicht möglich: Fehlermeldung dass text bereits definiert wurde. Das liegt wohl daran, dass man Variablen vom Typ String ja nicht verändern kann, oder? Daher hab ich folgendes versucht:
Code:
public class Text {
  public static void main(String[] args) {
  String text1;
  System.out.println(text1.length());// *1*
  text2 = null;
  System.out.println(text2.length());// *2*
  text3 = ""; 
  System.out.println(text3.length());// *3*
  text4 = "ABC";
  System.out.println(text4.length());// *4*
  }
}

Das geht nicht, weil text1 keine Initialisierung hat. Wie kann ich dann den Wert von text1 an der Stelle *1* herausfinden oder erklären?
Selbiges mit text2: Java sagt hier:Exception Nullpointer, Wert?
zu *3* die Länge eines leeren Strings dürfte 0 sein.
zu *4* die Länge des Strings "ABC" dürfte 3 sein da sich 3 chars darin befinden.

Kann mir da jemand helfen?

Dankeschön für die super HILFE! NC10
 
ok danke, aber ein String ist doch ein Objekt. Müsste String text; nur als Variablendeklaration ohne Wertzuweisung nicht den Standartwert null, die leere Referenz haben? ahso also null ist nur eine Referenz sprich eine leere Speicheradresse und kein WErt?!?! Richtig, ja nein?
Und text kann ich dann nicht einfach eine leere Referenz zuweisen was *2* erklären würde?!?!
 
ok danke, aber ein String ist doch ein Objekt.
kann man so nicht wiedersprechen, falls du wirklich von einem String-Objekt und nicht einer String-Variablen sprichst

Müsste String text; nur als Variablendeklaration ohne Wertzuweisung nicht den Standartwert null, die leere Referenz haben?
bei Klassenattributen ist das so, bei lokalen Variablen nicht, warum auch immer,
aber einfach selber = null dranschreiben, wenn du das möchtest
ahso also null ist nur eine Referenz sprich eine leere Speicheradresse und kein WErt?!?! Richtig, ja nein?
ja, wobei man das oft auch als Wert bezeichnet,
was ein Wert ist oder nicht, ist eine philosophische Frage, wenn du keine Definition zugrunde legst
Und text kann ich dann nicht einfach eine leere Referenz zuweisen was *2* erklären würde?!?!
klar kann man das zuweisen und 2 ist dann die Folge, keine Erklärung dafür, dass man es nicht machen kann

was du nicht machen kannst, ist von String null eine Methode aufzurufen
 
Danke für die Antwort!
Ok ich habe:
Code:
public class Text {
public static void main(String[] args) {
String text;
// *1*
text = null;
// *2*
text = "";
// *3*
text = "ABC";
// *4*
}
}

Was würdet ihr nun sagen? Welchen Wert hat text.length; an der Stelle *1* und
an der Stelle *2*?
Meine Antwort wäre: String text an der Stelle *1* ist nur eine Generierung eines OBjekts vom Typ String. Der Variablen wird kein Wert zugewiesen. Was heißt, dass text.length keinen Wert ergibt und somit Compilerfehler.
Was sagt ihr zu der Antwort? Fraglich ist für mich was der Wert von String text ist? Null ja anscheinend nicht weil es sich hier nicht um eine Klassenvariable sondern um eine lokale Variable handelt. Was ist der Wert von String text;?
Meine Antwort zu *2*: hier wird text null zugewiesen, sprich eine leere Referenz. Das heißt nur eine leere Speicheradresse und kein richtiger Wert, von dem man die Länge berechnen kann. Somit wiederum ein Compilerfehler.
Was sagt ihr zu dieser Antwort?

Vielen Dank!
 
bei 2 gibts keinen Compilerfehler sondern eine Exception zur Laufzeit,
den Wert für 1 kann ich dir auch nicht nennen, man sagt da (wie die Compilerfehlermeldung) dass die Variable nicht initialisiert ist,
sonst ok

edit:
> nur eine Generierung eines OBjekts vom Typ String

einer Variablen, keines Objektes, und dann auch Deklaration, nicht Generierung
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben