Hilfe bei Java Grundlagen?

3 Antworten

Das gesamte Konzept hinter Klassen/Objekte dient dazu, Probleme (bzw. Systeme) aus der tatsächlichen Welt besser/einfacher abbilden zu können. Es hilft dir zudem, dein Programm logisch zu strukturieren.

Ein gutes Beispiel wäre die Programmierung von Pac-Man. Es gibt ein Spielfeld, es gibt die Spielfigur, es gibt sammelbare Punkte und die Geister. Das sind alles Objekte in einem System, die (miteinander) agieren. Für jeden Objekttyp (Spielfigur, Geist, Punkt, ...) kann eine Klasse definiert werden, die die Eigenschaften (Felder) und Verhaltensweisen (Methoden) eines solchen Objekts beschreibt.

Z.b kann man Variablen auch mit einem Klassennamen deklarieren, statt mit einem einfachen Datentypen wie int oder String.

Java unterscheidet zwischen primitiven und komplexen Datentypen.

Primitive Datentypen verweisen auf einen einfachen, konstanten Wert. Zum Beispiel eine Zahl (s. int, float, double, ...).

Komplexe Datentypen hingegen können sich mehrere Eigenschaften merken und Methoden besitzen. Das heißt, sie benötigen mehr Speicherplatz und es wird eine Klasse benötigt, die ihren Aufbau beschreibt. Variablen komplexen Datentyps (z.B. String, Scanner, ...) verweisen somit auch immer auf ein Objekt.

Auch die Erzeugung eines neuen Objekts mit new bereitet mir Schwierigkeiten.

Du musst an sich nur wissen, welche Informationen ein Objekt braucht, um erstellt zu werden. Das lässt sich anhand des Konstruktors ablesen, der von der zugehörigen Klasse definiert wird. Bei Klassen aus der Standardbibliothek oder Klassen aus externen Bibliotheken u.ä. kannst du in der Regel in der jeweiligen Dokumentation nachschlagen, welche Konstruktoren eine bestimmte Klasse bietet.

Beim Erstellen des Objekts schreibst du nach dem new-Operator den Konstruktoraufruf. Der Konstruktor hat stets den selben Namen wie die Klasse.

Beispiel 1:

class Car {}

// main:
Car car = new Car();

Da in der Klasse kein expliziter Konstruktor definiert wird, wird der Standardkonstruktor verwendet, der parameterlos ist.

Beispiel 2:

class Car {
  public Car() {
  }
}

// main:
Car car = new Car();

Im Gegensatz zu Beispiel 1 wird explizit ein Konstruktor definiert (d.h. der Standardkonstruktor wird somit auch überschrieben). Der ist aber ebenfalls parameterlos, daher unterscheidet sich sein Aufruf nicht zu dem von oben.

Beispiel 3:

class Car {
  public Car(String color) {
  }
}

// main:
Car car = new Car("red");

Diesmal fordert der explizit definierte Konstruktor einen Parameter vom Typ String. Ohne diese Angabe kann kein Car-Objekt angelegt werden.

Beispiel 4:

class Car {
  public Car() {
  }

  public Car(String color) {
  }

  public Car(int maxVelocity) {
  }
}

// main:
Car car1 = new Car();
Car car2 = new Car("red");
Car car3 = new Car(250);

Die Klasse besitzt mehrere Konstruktoren. Somit kann man auch mit unterschiedlichen Daten Objekte der Klasse erzeugen.


kabik334 
Beitragsersteller
 29.05.2024, 18:49

Danke für die ausfühliche Antwort.Beim letzten bsp könnte ich aber auch alles in einen Konstruktor verpacken oder? indem ich mehrere Parameter übergebe. Oder ist bei der Klasse Car ein Auto nur durch eine eigenschaft definiert?

0
regex9  29.05.2024, 19:17
@kabik334

Ja, du könntest auch einen Konstruktor definieren, der mehrere Parameter entgegennimmt:

class Car {
  public Car() {
  }

  public Car(String color) {
  }

  public Car(int maxVelocity) {
  }

  public Car(String color, int maxVelocity) {
  }
}

// main:
Car car1 = new Car();
Car car2 = new Car("red");
Car car3 = new Car(250);
Car car4 = new Car("yellow", 100);

An sich soll das Beispiel lediglich verdeutlichen, dass zum Erstellen eines Objekts die Anforderungen der verfügbaren Konstruktoren erfüllt werden müssen. Es können etliche Konstruktoren mit unterschiedlichen Parameterlisten definiert werden. Welche sinnvoll sind, entscheidet der Entwickler, der die Klasse programmiert.

1

Objektorientierung ist ein großes Thema und es ist vollkommen okay, wenn du damit Schwierigkeiten hast. Aufgrund der Relevanz des Themas gibt es aber auch unzählige Erklärungen im Internet, mit denen du dein Wissen verstärken kannst. Ich versuche trotzdem, das Konzept grob zu erklären.

Das Grundkonzept von Objektorientierter Programmierung ist, dass alles ein Objekt ist. Ein Objekt kannst du dir wie ein Gegenstand in der physischen Welt vorstellen, auch wenn es in der Praxis natürlich ein wenig komplexer ist. Ein Bus ist ein Objekt, genauso wie ein Mensch oder ein PC. Diese Objekte haben bestimmte Eigenschaften (Attribute) und können miteinander interagieren (über Methoden).

Objekte sind dabei konkrete Instanzen von Klassen. Klassen kannst du dir als eine Art Bauplan für die Objekte vorstellen, welche die Attribute und Methoden definieren. Wir ein Bauplan für einen PC oder ein Biologie-Lehrbuch, das erklärt, wie der menschliche Körper funktioniert.

In Java ist die Aussage "alles ist ein Objekt" allerdings nicht ganz korrekt. Aus Performancegründen gibt es sogenannte primitive Datentypen wie int, byte und double, welche man in der Regel ein wenig anders anlegt als normale Objekte:

int zahl = 5;
double dezimalzahl = 3.141;

Strings haben zwar auch eine Kurzschreibweise mit den doppelten Anführungszeichen, sind aber normale* Objekte und keine primitiven Datentypen. Sie stellen eine Ausnahme dar, wenn du es so willst:

String test = "Hallo Welt!";

Normale Objekte erstellst du mit dem Schlüsselwort new, gefolgt von dem Namen der Klasse:

Bus bus = new Bus(); // Instanziierung/Erstellung des Objekts
bus.passagiere = 42; // Zuweisung eines Attributs
bus.fahren(); // Aufruf einer Methode des Objekts
System.out.print(bus.passagiere); // Lesen und anschließende Ausgabe eines Attributs

Alle Objekte können genau nach diesem Muster erstellt und verwendet werden. Welche Objekte es gibt und wie du sie verwendest kannst du einfach im Internet nachschauen, insbesondere in der offiziellen Dokumentation von Java ("Javadocs"). Mit der Zeit wirst du die Wichtigsten auswendig lernen :)

Das war es mit den absoluten Grundlagen, aber ich habe noch zwei Anmerkungen:

1. Man kann noch mehr mit Klassen und Objekten machen, sie zum Beispiel vererben und spezielle Arten von Klassen definieren. Damit kannst du dir aber Zeit lassen, erstmal solltest du diese Grundlagen sicher beherrschen.

2. Objektorientierung hat das Ziel, Programmcode zu vereinfachen, ist aber oftmals komplexer als Alternativen. Das heißt natürlich nicht unbedingt, dass Objektorientierung schlechter ist.

Ich wünsche dir auf jeden Fall viel Erfolg mit Java! :)

Woher ich das weiß:Studium / Ausbildung – Informatikstudent

in programmiersprachen hast du variablen und funktionen.

in

var x = 2;
  1. erstellst du eine variable (also quasi eine kiste mit einem namen)
  2. packst einen wert rein. der wert ist 2.

bei

var file = new File("/cod.exe");
  1. erstellst du eine kiste
  2. packst in die kiste einen wert rein
  3. der wert ist ein File Object. dafür benutzt du new um das objekt zu konstruieren
  4. du übergibst dem konstruktor einen verweis. das konstruierte File Object hat einen verweis auf call of duty (du hast es vorhin auf dem beispielrechner installiert 😏)

----------------------------------------------------------------------------------------------------

was sind klassen und objekte?

klassen = baupläne

objekte = tatsächlich konstruierte instanzen, gebaut nach deinem bauplan.

wieso?

mit objekte kannst du daten und funktionen gruppieren.

wie?

wenn objekte erzeugt werden, wird ein objekt mit dem konstruktor konstruiert.
den konstruktor kannst du mit new benutzen. (new Object()).

beispiel:

class Student
{
  String firstName;
  String lastName;
  int age;

  /**
   * basic konstruktor
   */
  Student(String firstName, String lastName, int age)
  {
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
  }

  /**
   * kannst schauen ob er rauchen darf
   */
  boolean isAllowedToSmoke()
  {
    return age >= 18;
  }
}

in dieser beispielklasse werden schüler modelliert.
schüler haben sowohl namen als auch ein alter.
mit der funktion "isAllowedToSmoke" könnten wir direkt gucken ob ein gewisser schüler alt genug ist um kippen zu rauchen.

var jonas = new Student("Jonas", "Schmidt", 17);
if (jonas.isAllowedToSmoke())
{
  System.out.println("rauchen macht dein schniedel kleiner");
}
else
{
  System.out.println("ich werd dir die kippe wegnehmen");
}

natürlich ist das kein praktisches beispiel sondern nur zur veranschaulichung.