• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

[java] statische methoden | throws Exception

klausbyte

Spiele-Kenner/in
Mitglied seit
22.03.2001
Beiträge
3.863
Reaktionspunkte
204
hi! ich hab eine InteractiveIO Klasse um einfach was zu schreiben oder zu lesen.

jetz nut ich die tolle klasse in meiner main methode der eigentlichen klasse:


eclipise bringt mir die meldung:
Der Zugriff auf die statische Methode write(String) aus dem Typ InteractiveIO sollte auf statischem
Weg erfolgen.

ich vermut schon das ich das nicht ganz verstanden hab, mit dem statischen zeugs .. also statisch ist eine methode wenn sie zu einer klasse gehört, aber nicht zu einem objekt. wenn ich jetzt das static weglasse, bei den methoden in der io- klasse funktioniert es nichtmehr.

Damit komme ich auch gleich schon zur zweiten frage: was bedeutet dieses Throws Exception, manchmal au Throws IOException? unser lehrer hat das nur im unterricht hingeschrieben "darauf gehen wir später ein".


jetz code ich halt irgendwelches java zeug per try and error und verstehs net vollständig, und bin deshalb auch nicht zufrieden.
ich kann php im schlaf, und c++ hab ich auch einige zeit mal programiert, aber hier häng ich irgendwie, und möchte es verstanden haben.




anwendung: (gekürzt)
Code:
class Pnutzen
{
	public static void main(String[] Args) throws Exception
	{
		InteractiveIO io;
		io = new InteractiveIO();
..
		io.write("Person angelegt.");
		io.write("");
	
	}
}


die io - klasse:
Code:
class InteractiveIO {
	public static void write(String s)	{
		writeAndFlush(s);
	}
	
	public static String promptAndRead(String s) throws Exception	{
		writeAndFlush(s);
		return br.readLine();
	}
	
	public static float readFloat(String s) throws Exception{
		return Float.parseFloat(promptAndRead(s).trim());
	}
	
	public static double readDouble(String s) throws Exception{
		return Double.parseDouble(promptAndRead(s).trim());
	}
	
	public static int readInt (String s) throws Exception {
		return Integer.parseInt(promptAndRead(s).trim());
	}
	
	public static long readLong (String s) throws Exception {
		return Long.parseLong (promptAndRead(s).trim());
	}
	
	public static BigInteger readBigInt(String s) throws Exception {
		String str = promptAndRead(s).trim();
		BigInteger x;
		x = new BigInteger(str);
		return x;
	}
	
	public static BigDecimal readBigDecimal(String s) throws Exception {
		String str = promptAndRead(s).trim();
		BigDecimal x;
		x = new BigDecimal(str);
		return x;
	}
	
	private static void writeAndFlush(String s)	{
		System.out.println(s);
		System.out.flush();
	}
	
	
	private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));;
}
 
Wirklich helfen werd ich dir jetzt auch nicht können, da ich Java nicht mag, aber zur Theorie...

Statische Methoden:

Wenn du in einer Klasse eine Methode implementierst, ist diese in der Regel erst nutzbar, wenn du ein Objekt dieser Klasse erzeugt hast. Statische Methoden bilden jetzt die Ausnahme und stellen Funktionalität auch ohne Erzeugung eines Objekts bereit. (Sinnvoll zB bei Funktionen, die für Typumwandlung oder einfache arithmetische Operationen eingesetzt werden sollen.)

Du erzeugst jetzt allerdings in deiner main Methode ein Objekt und möchtest darin eine statische Methode aufrufen. Versuch doch einfach mal statt dem hier:

Code:
		InteractiveIO io;
		io = new InteractiveIO();
..
		io.write("Person angelegt.");
		io.write("");

das hier:

Code:
InteractiveIO.write("Person angelegt");
InteractiveIO.write("");
(siehe auch http://www.leepoint.net/notes-java/flow/methods/50static-methods.html )

Das "throws Exception" definiert den Exceptiontyp, der von der Funktion ausgegeben wird, wenn ein Fehler auftritt (in deinem Fall gibst du entweder allgemeine, nicht näher spezifizierte Fehler aus (Exception), bzw. Fehler bei der Ein- und Ausgabe (IOException).

Fehlertypen helfen bei der Fehleranalyse ungemein, den Ursprung eines Fehlers zu lokalisieren.

Siehe auch http://java.sun.com/docs/books/tutorial/essential/exceptions/declaring.html

Weiß nicht, ob dir das jetzt weiterhilft, programmiere selbst kein Java. :|

mfg, ski
 
ok danke dir, das mit den statischen hab ich jetz verstsanden. einfach unsauber erklärt vom lehrer .. und exceptions .. naja ich throw immer alle xceptions und es funktioniert ;( hass mein lehrer
 
klausbyte am 07.11.2006 10:04 schrieb:
ok danke dir, das mit den statischen hab ich jetz verstsanden. einfach unsauber erklärt vom lehrer .. und exceptions .. naja ich throw immer alle xceptions und es funktioniert ;( hass mein lehrer
Mit dem throw definierst du die Exception, die ausgegeben wird, wenn irgendein Fehler in der Methode auftritt. Ich weiß jetzt nicht wirklich Bescheid über Java, aber das wird eigtl. nicht bei jeder eigenen Methode benötigt...

btw: Ich hab hier noch ein Buch über Java liegen, mit exzellentem Theorieteil. Hab mir das vor ein paar Jahren gekauft, weil ich dachte, ich müsste Java lernen, habe dann aber nur den Theorieteil gelesen.

Und zwar das hier: http://www.amazon.de/erste-Programmiersprache-Einsteiger-Profi-CD-ROM/dp/3519326426
(2003 gekauft, geb ich gern für 5 euro + porto her.)
 
Im Zweifelsfall lieber try-catch um den entsprechenden Block legen, mit throws reicht man die exception nur in der Kette nach oben weiter. Am Anfang sollte lokales exception handling schon deutlich leichter sein.
 
LowriderRoxx am 07.11.2006 20:24 schrieb:
Im Zweifelsfall lieber try-catch um den entsprechenden Block legen, mit throws reicht man die exception nur in der Kette nach oben weiter. Am Anfang sollte lokales exception handling schon deutlich leichter sein.
Normalerweise ja, bei komplexen Programmen kommt man oft um selbstgeschriebene Exceptiontypen nicht herum. Und ich nehme mal an, dass klausbytes Lehrer darauf schlußendlich hinauswill.
 
skicu am 07.11.2006 20:35 schrieb:
Normalerweise ja, bei komplexen Programmen kommt man oft um selbstgeschriebene Exceptiontypen nicht herum. Und ich nehme mal an, dass klausbytes Lehrer darauf schlußendlich hinauswill.
Auch in try-catch Blöcken kann man mit throw (ohne s) selbstdefinierte Exceptions werfen. Geht ja nur darum, dass der ausgelöste Fehler auch vor Ort abgefangen und nicht einfach weitergereicht wird - sowas sollte erst kommen, wenn man die Grundlagen durch hat.
 
Zurück