public class Konto {
public static void main(String[] args) {
Kontodaten meinKonto = new Kontodaten();
Kontodaten anderesKonto = new Kontodaten();
meinKonto.einzahlen(25.00);
anderesKonto.einzahlen(32.00);
System.out.println("Auf ihrem Konto liegen "
+ meinKonto.getKontostand() + " Euro");
System.out.println("Auf anderem Konto liegen "
+ anderesKonto.getKontostand() + " Euro");
}
}
class Kontodaten {
double kontostand;
void einzahlen(double betrag) {
this.kontostand += betrag;
}
double getKontostand() {
return this.kontostand;
}
}
Ich habe 2 Fragen zu diesem Beispiel. Warum muss ich die konstostand Variable vom Typ double mit keinem Wert belegen? Obwohl ich die nicht belegt habe, hat sie einen Wert 0.
Zweite Frage, die mich am meisten interessiert und die ich noch immer nicht verstehen kann.
Warum sollte man in diesem Beispiel this verwenden? Ohne this funktioniert das Programm genau so gut. Kann mir jemand an einem Beispiel zeigen, wo this wirklich notwendig ist, vieleicht werde ich dann es verstehen?
also erstmal zu dem 0 jedes Objekt hat einen default Wert
bei Objekten ist es null und bei primitiven Datentypen ist es 0 bis auf boolean da ist es false
In dem Beispiel würd ich auch kein this verwenden das muss man nicht einige machen das aber man muss das nicht machen (ich würds auch nicht machen)
brauchen tust du das wenn du in einer Methode eine lokale Variable mit dem gleichen Namen hast wie in einer deiner Klasse. Wenn du jetzt sagst variablenname = … dann greifst du auf die lokale Variable zu, wenn du aber die der Klasse haben willst dann musst du this davor schreiben dann weiß Java (auch in C++ und anderen Sprachen) das du die der Klasse willst
public class This {
public static void main(String[] args) {
// TODO Auto-generated method stub
ThisTest test = new ThisTest();
test.schreibe();
}
}
class ThisTest{
String name = "Alex M.";
void schreibe(){
String name = "John M.";
System.out.println(name);
//Lokale Variable, die nur innerhalb dieser Methode existiert
System.out.println(this.name);
//Globale Variable, die innnerhalb dieser Klasse existiert
}
}
Ich habe hier ein Beispiel gebastelt und ich glaube ich habe endlich verstanden wie das funktioniert. Ich habe dort 2 Kommentare reingeschrieben, schau dir bitte mein Beispiel an und die Kommentare und sag mir ob ich es richtig verstanden habe hoff. :stumm:
package self;
public class SevenException extends ArithmeticException{
private double zahl;
public SevenException(double zahl) {
this.zahl = zahl;
}
public String getMessage(){
return "Ich mag keine sieben! ERROR!";
}
}
package self;
public class TesteSieben {
public static void main(String[] args) throws SevenException{
int meineZahl = 7;
if(meineZahl == 7){
throw new SevenException(meineZahl);
}
else
{
System.out.println("Diese Zahl mag ich!");
}
}
}
Fehlermeldung:
Exception in thread "main" self.SevenException: Ich mag keine sieben! ERROR!
at self.TesteSieben.main(TesteSieben.java:9)
Warum funktioniert das und warum funktioniert meine Exception nicht? Hier hat man ohne try-catch gemacht. Ich habe bisschen anders gemacht, aber ich sehe keinen Fehler in meinem Versuch…hmmm…
also wenn das genauso gemacht wurde kann ichs dir nicht sagen
ansonsten würd ich darauf tippen das sie die toString() überschrieben haben
aber so mit dem aus der main weiterleiten ist eh scheiße
package self;
public class SevenException extends ArithmeticException{
public String getMessage(){
return "Ich mag keine sieben! ERROR!";
}
}
package self;
public class TesteSieben {
public static void main(String[] args) throws SevenException{
int meineZahl = 7;
if(meineZahl == 7){
throw new SevenException();
}
else
{
System.out.println("Diese Zahl mag ich!");
}
}
}
Ich habe nochmal versucht und jetzt hat es geklappt. Warum die auf DVD einen Konstruktor gemacht haben, verstehe ich nicht. Ist doch an der Stelle überflüssung. Die Zahlen werden ja nicht in der Exception sondern in dem Programm überprüft. Die getMessage()-Methode muss public sein. Als es funktioniert hat und ich public entfernen wollte, hat er sofort gemekert. Warum er beim ersten mal das nicht gemacht hat, hmm? Naja egal. Jetzt geht es und sogar viel kurzer als auf der DVD.
ach jetzt seh ichs du hast nen Schreibfehler drin gehabt du hast Messege geschrieben nicht Message
deswegen hat er auch nicht gemeckert weil man kann den Modier nicht “enger” machen als in der Oberklasse
d.h. du kannst aus private -> default machen (kein Modifier) oder aus protected --> public
aber nicht umgekehrt public -> private
Ich verstehe nicht ganz. Ich habe in meinem 1 Beispiel zwar die Methode auf Englisch falsch geschrieben, aber diese Methode habe ich ja nie in der MainKlasse aufgerufen, sondern die ganze Klasse(SevenException) und da ist es egal wie die Methode heisst, oder nicht? Irgendwie verstehe ich das noch nicht:confused:
getMessage oder getMessege? Ich rede vom 1 Bsp. Da gibt es doch keine getMessage, oder?
Mein erster und letzer Bsp unterscheiden sich nur, dass bei einempublic steht und bei anderem nicht, aber warum hat er dann die methode ohne public nicht unterstrichen(eclipse)? Oder bin ich vieleicht blind und sehe irgendwas nicht lol:stumm:
Wieso soll er das unterstreichen?
Das ist für Java nur eine neue Methode die du geschrieben hast, und die getMessage Methode gibt es aber halt in einer der Superklassen.