Frage zu Konstruktoren und dem this Operator

Ludacriz2006

Mitglied
Hallo,

nehmen wir folgendes an:

Java:
Bruch r1 = new Bruch(4, 5);

Jetzt rufe ich folgendes auf:

Java:
r1.add(new Bruch(4,-3));

wie kann ich nun in der add() Methode auf die Werte 1,5 vom r1 zugreifen?
Habs mit this probiert aber dann sagt der mir "call to this must be first statement in constructor".

Wie kann ich das lösen.

Gruß
 

Landei

Top Contributor
Bruch hat eine add Methode, die etwa so aussieht:

Java:
class Bruch {
  int zaehler;
  int nenner;
  ...
  public void add(Bruch that) {
     ...
  }
}
Nun kannst du auf die Instanzvariablen des aufrufenden Objekts r1 innerhalb von add einfach mit [c]zaehler[/c] oder [c]this.zaehler[/c] verweisen, und auf die Instanzvariablen des Arguments mit [c]that.zaehler[/c]. Oder anders ausgedrückt: Das aufgerufene add ist sozusagen das add von r1 und "kennt" deshalb seine "eigenen" Variablen.
 
G

Gast2

Gast
Zeig mal deine Klasse.
Aber grundsätzlich ist das mit this schon richtig. So kannst du z.b. auf die Werte zugreifen:

Java:
public class Bruch {

	private int zaehler;
	private int nenner;
	
	public Bruch(int zaehler, int nenner) {
		this.zaehler = zaehler;
		this.nenner = nenner;
	}
	
	public void add(Bruch b) {
		this.nenner = this.nenner * b.nenner;
		this.zaehler = (this.zaehler * b.nenner) + (b.zaehler * this.nenner);
	}
}
 
S

SlaterB

Gast
> "call to this must be first statement in constructor"
ist eine typische Fehlermeldung für einen Konstruktor, wie es ja auch da steht,

dass du die beim editieren der add()-Methode erhälst ist fragwürdig,
poste doch die add()-Methode bzw. die ganze Klasse,

und was weißt du alles über die Fehlemeldung? Zeilenangabe dabei? Screenshot eine GUI die einen bestimmten Programmteil rot unterstreicht?
 

Ludacriz2006

Mitglied
Java:
public class Bruch {

	private int zaehler;
	private int nenner;
	
	public Bruch(int zaehler, int nenner) {
		this.zaehler = zaehler;
		this.nenner = nenner;
	}
	
	public void add(Bruch b) {
		this.nenner = this.nenner * b.nenner;
		this.zaehler = (this.zaehler * b.nenner) + (b.zaehler * this.nenner);
	}
}

Hey das geht ja super schnell hier.
Danke, ich sehe es jetzt, aber deine add Methode ist fehlerhaft.
Das muss andersrum sein, dann werden Brüche addiert

Java:
this.zaehler = (this.zaehler * b.nenner) + (b.zaehler * this.nenner);
this.nenner = this.nenner * b.nenner;

Vielen Dank
 

Ludacriz2006

Mitglied
Ich hab mal ne andere Frage. Kann eine Konstruktorvariable den Wert eines primitiven Typs annehmen.

Beispiel:

Java:
Peter p = new Peter(2,3);

Kann hier jetzt p ein int oder ein boolean sein?

Danke
 

tfa

Top Contributor
Nein. Primitive Typen haben keine Konstruktoren. Die werden einfach so - als "Literal" - hingeschrieben.
 

Ludacriz2006

Mitglied
Nehmen wir an ich habe folgendes:

Java:
Bruch s=null;

Nun will ich aber auf s.ergebnis zugreifen, aber er gibt mir ein NullPointerException aus. (ergebnis ist eine Variable in der Bruch Klasse.)

Wieso ist denn s.ergebnis auch nicht null, wenn doch das Objekt s null ist?
 

preachie

Aktives Mitglied
Das Objekt ist nicht null.
Mit Bruch s = null löschst Du die Referenz auf das Objekt der Klasse Bruch, die in s gespeichert war.
Damit kannst Du mit s nicht mehr auf das Objekt zugreifen, da es ins Leere zeigt. Daher auch die NullPointerException.
Wenn Du Werte innerhalb des Objektes verändern möchtest, solltest Du in der Klasse Bruch entsprechende setter Methoden implementieren.

Edit:
Achja, Du solltest auch nicht direkt von außen auf Variablen des Objektes zugreifen, sondern hierfür entsprechende getter Methoden implementieren ;)

Java:
class Bruch {
	private int ergebnis;
...
	public int getErgebnis()
	{
		return ergebnis;
	}
	
	public void setEregbis(int wert)
	{
		ergebnis = wert;
	}
}
 
Zuletzt bearbeitet:

Ludacriz2006

Mitglied
Wozu sind die getter Methoden gut? Haben die Vorteile?

Ich mein das ist doch das selbe wenn ich jetzt direkt von der main darauf zugreife oder diese getter Methoden benutze.
 

bkalinski

Mitglied
Der this Operator ruft immer das die aktuelle Instanz auf. Wenn du this() so benutzen willst, dann kannst du es nur als ersten Operator benutzen da es logischerweise den Konstruktor des aktuellen Objekts aufruft.

Java:
class Bruch {
  private int zaehler;
  private int nenner;

  public Bruch() {
    this(3, 8);
  }

  public Bruch(int zaehler, int nenner) {
    this.zaehler = zaehler;
    this.nenner = nenner;
  }

  public void add(Bruch b) {
    this.nenner = this.nenner * b.getNenner();
    this.zaehler = (this.zaehler * b.getNenner) + (b.getZaehler * this.nenner);
  }

  public int getNenner() {
    return this.nenner;
  }

  public int getZaehler() {
    return this.zaehler;
}

Wenn du den Konstruktor mit den beiden Parametern aufrufst kannst du den Zäher bzw. Nenner beim Instanziieren selbst bestimmen, wenn du den Konstruktor ohne Parameter aufrufst wird ein Objekt mit Defaul-Parametern instanziiert. Ich mache das sehr gerne weil ich bei Default-objekten bzw. wenn ich Teste nicht immer Parameter schreiben muss.

Zu deiner Frage mit den Gettern, ich habe in dem Code mal zwei Getter definiert, in der Methode add(...) werden sie auch benutzt. Dadurch das die beiden Instanzvariablen Zaehler und Nenner private sind kann man sie nicht von "außen" aufrufen.

In diesem Beispiel könnten nämlich sonst b.nenner und b.zaehler von "außen" also vom Objekt "this" nicht aufgerufen werden. Durch den Getter bleiben die Variablen aber immer noch schreibgeschützt und können nur gelesen werden. Das ganze nennt sich Kapselung und sollte eigentlich bei jedem OO-Programm verwendet werden. Bei einer einzigen Klasse, die nur aus der main() gesteuert wird mag das noch seltsam wirken aber bei Projekten mit mehreren Klassen hats schon Sinn. Am besten man gewöhnt sich sowas schon im kleinen an, damit mans im Großen nicht vergisst ;)

PS: Setter werden dann im Gegenzug benutzt um Variablenwerte zu setzen ;)
 
Zuletzt bearbeitet:

Landei

Top Contributor
Wozu sind die getter Methoden gut? Haben die Vorteile?

Ich mein das ist doch das selbe wenn ich jetzt direkt von der main darauf zugreife oder diese getter Methoden benutze.

Setter und Getter haben den Vorteil, dass du kontrollieren kannst, was du bekommst und herausgibst. Stell dir vor, du initialisierst ein Feld ordentlich, und dann schreibt dir jemand einfach null rein - ärgerlich. Oder du willst jemand Lesezugriff auf eine Liste geben - mit dem direkten Zugriff kannst du nicht verhindern, dass die Liste verändert wird, bei einem Getter kannst du z.B. mit Collections.unmodifiableList(list) eine unveränderliche Kopie zurückgeben. Oder deine Werte müssen bestimmte Bedingungen erfüllen, etwa wenn du eine Zeitspanne von-bis mit Date abbildest, und der von-Wert immer kleiner als der bis-Wert sein muss.
 

Andi_CH

Top Contributor
getter und setter enthalten nicht immer nur Zuweisungen bzw eine return statement.

Es kann durchaus sein, dass ein setter Werte überprüft, dann speichert und gleich noch eine Berechnung auslöst oder einen Counter hochzählt oder oder ....

Es kann aber auch sein, dass die Berechnung nicht im setter sondern erst im getter gemacht wird.

Private Membervariablen zwingen die Benutzer dazu deine Methoden zu verwenden und die bist frei darin, die Berechnung dahin zu verschieben wo es geeigneter ist ....
 

Landei

Top Contributor
Ein weiterer Vorteil ist die Flexibilität: Stell dir vor du hast eine Klasse Person, die auch das Alter enthält. Später fällt dir ein, dass es praktischer wäre, stattdessen den Geburtstag zu speichern. Bei direktem Zugriff hast du Pech, alle Anwender dieser Klasse müssten sich umstellen. Fragst du das Alter dagegen über einen Getter ab, gibt es kein Problem, er berechnet einfach das Alter aus dem Geburtsdatum, ohne dass sich etwas für den Nutzer der Klasse ändern würde. Getter und Setter schirmen also in einem gewissen Maße "Interna" der Klasse von der Außenwelt ab.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
D Blöde(?) Frage zu Konstruktoren und set-Methoden Java Basics - Anfänger-Themen 3
G Frage zu Konstruktoren Java Basics - Anfänger-Themen 12
S Frage zu Konstruktoren Java Basics - Anfänger-Themen 7
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
L Wie frage ich ab, ob in einem Array, Werte doppelt vorkommen? Java Basics - Anfänger-Themen 4
D Frage zur IDE IntelliJ IDEA Java Basics - Anfänger-Themen 6
H Frage zum 2d Array Java Basics - Anfänger-Themen 1
N Frage zum Newton-Fraktal Java Basics - Anfänger-Themen 1
H Frage zu interfaces Java Basics - Anfänger-Themen 1
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
I Frage zu SkipList Java Basics - Anfänger-Themen 4
G Frage zu JScrollPane Java Basics - Anfänger-Themen 12
Kirby.exe Allgemeine Frage Java Basics - Anfänger-Themen 3
W Frage zu anonymen Klassen Java Basics - Anfänger-Themen 4
J Kleine Frage zu OOP Java Basics - Anfänger-Themen 371
S Frage Klasse und Objekte Java Basics - Anfänger-Themen 2
F Frage zu Iteratoren Java Basics - Anfänger-Themen 2
C Erste Schritte Frage zur ArrayList Java Basics - Anfänger-Themen 15
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
H Frage zur ermittlung eines doppelte Paars aus Sotieralgorithmus Java Basics - Anfänger-Themen 4
H Frage zum Array Java Basics - Anfänger-Themen 17
G Schach -Frage 2- Maussteuerung Java Basics - Anfänger-Themen 7
G Schach in Java - Allgemeine Frage zur Architektur Java Basics - Anfänger-Themen 7
B Fachliche Frage bei Rechnungen Java Basics - Anfänger-Themen 16
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben