Hallo zusammen,
folgendes Problem habe ich in meinem Eclipse:
Meine Klasse “nutzeKonto” (mit der main-Methode) ruft eine andere Klasse “Konto” auf. Wenn ich mit dem Debugger an die Stelle mit new Konto() komme, moechte ich ja mit F5 (Step Into) in die Klasse “Konto” gelangen, um zu sehen was da drin so passiert. Stattdessen sprint Eclipse zuerst in alle moeglichen Klassen, die mich gar nicht interessieren und mich nichts angehen (ClassLoader, Launcher, String, etc.).
Ist das normal, oder hab ich was verstellt?
Habt Gnade, ich bin ein Greenhorn! :verzweifel:
Danke schonmal!
Thorwine
[quote=Thorwine]Wenn ich mit dem Debugger an die Stelle mit new Konto() komme, moechte ich ja mit F5 (Step Into) in die Klasse “Konto” gelangen, um zu sehen was da drin so passiert. Stattdessen sprint Eclipse zuerst in alle moeglichen Klassen, die mich gar nicht interessieren und mich nichts angehen (ClassLoader, Launcher, String, etc.).[/quote]Wenn Dein Programm an der Stelle new Konto()
ist existiert ja noch gar kein Objekt dieser Klasse, in das der Debugger hineinwechseln könnte. Die JVM muss dieses Objekt erst erstellen, weshalb dann erst mal 'ne menge Code aus der JVM selbst ausgeführt wird, bis Du dann irgendwann im Konstruktor ankommst.
Wenn Du aber sicher weißt, dass die Stelle mit new Konto()
durchlaufen wird kannst Du auch einen Brake-Point direkt in diesen Konstruktor legen und den Debugger mit F8 bis dahin weiter laufen lassen.
bye
TT
Danke fuer den Tipp, aber das funktioniert so nicht.
Ich denke, weil ueber die Klasse “Konto” momentan nur das Objekt mit seinen Instanz-Variablen erstellt wird.
public static void main(String[] args) {
Konto meinKonto;
meinKonto = new Konto();
meinKonto.name = "Max Muster";
.
.
.
}```
```public class Konto {
String name;
String adresse;
double saldo;
}```
So weit ich weiß, kann ich da keinen Breakpoint setzen, oder?
*** Edit ***
```public class Konto {
String name;
String adresse;
double saldo;
public Konto (String n, String a, double s) // <- setzen wir hier mal einen Breakpoint!
{
name = n;
adresse = a;
saldo = s;
}
}```
Nix sagen, hab mein Problem gefunden. Default Konstruktor und so... :o)
Field-Breakpoints sollten eigentlich auch gehen. Das was du gesetzt hast wäre ein „Method-Breakpoint“. Intellij IDEA warntvor solchen - da diese das Debugging dramatisch verlangsamen können. Für dich ist auch eigentlich ausreichend den Breakpoint in Zeile 8 (name = n) zu packen.
Zu guter letzt: Klassennamen werden immer in UpperCamelCase geschrieben. Gewöhn dir das gleich richtig an
Also in den Zeilen 1-4 bekomme ich keinen Breakpoint gesetzt, bei dem dann auch angehalten wird. In den Zeilen 6-10 kein Problem…
Klassenname natuerlich sofort in UpperCamelCase, also NutzKonto, verbessert. Danke!
Wo wir schon beim Meckern sind… ;o)
[quote=Thorwine]meinKonto.name = “Max Muster”;[/quote]Ist eigentlich ein NoGO.
Warum?
Weil wir hier (bei Java) in der objektorientierten Programmierung (OOP) sind und da darf niemand außer der Klasse Konto
selbst wissen, wie der Name des Kontos tatsächlich abgespeichert ist. Die Regel, die hier verletzt wird heißt “Information Hiding”.
Der besser Weg wäre, den Namen des Kontos über den Konstruktor zu setzen (so wie Du es anscheinen schon vorgesehen hast).
Wenn sich der Name zur Laufzeit des Programms ändern kann ist auch eine “Setter-” Methode (void setName(String newName)
) denkbar.
Andererseits gilt: Setter- und Getter- Methoden sind nur in begründeten Ausnahmefällen einzusetzen, weil sie ein anderes Muster der OOP verletzten: “Tell, don’t ask!”.
bye
TT