Bild Referenz: https://commons.wikimedia.org/wiki/File:CPT-OOP-objects_and_classes_-_attmeth.svg
<p dir="auto"><h2>Intro<a href="https://steemit.com/programming/@drifter1/programming-java-classes-and-methods" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Java Classes and Methods" basiert, dem wir heute zu Deutsch übersetzen werden und zusätzlich auch "optimieren" werden. Wir werden also heute über die so genannten Klassen reden mit denen wir Objekte darstellen. Dabei werden wir auch über die wichtigsten Methoden/Funktionen reden, etwas das natürlich auch enthält wie man Methoden generell definieren kann. Also, fangen wir dann mal direkt an!<span> Hallo, ich bin's <a href="/@drifter2">@drifter2! Der heutige Artikel ist an meinem englischen Artikel "<p>
<hr />
<h2>Klassen-Aufbau <strong>Jede Klasse(Class auf Englisch) in Java ist meistens <strong>eine separate .java Datei, aber das muss nicht unbedingt der Fall sein, da wir auch Innere (Inner) und Äußere (Outer) Klassen definieren können. Eine solche Klasse <strong>besteht aus Variablen und Funktionen, die wir in OOP meistens Daten oder <strong>Attributen und Methoden nennen (auf Englisch attributes und methods). Die <strong>Sichtbarkeit der ganzen Klasse und von den Daten und Methoden die diese Klasse enthält, kann mit folgenden <strong>Zugriffsrechten geregelt werden:
<ul>
<li><em>public (Global)): Zugriff von überall
<li><em>private (Privat): Zugriff nur in der Klasse
<li><em>protected (Geschützt): Zugriff nur in der Klasse und den Unterklassen die diese enthält, und zusätlich in der "package" wo die Klasse drinne ist
<li><em>default (Voreinstellung): Zugriff nur in der Klasse und der "package" wo die Klasse drinne ist
Diese Zugriffsrechte kommen als Wörter vor dem Namen einer Klasse, Variable oder Funktion, bei der Deklarierung dieser. Genau wie wir auch den Datentyp deklarieren.<br /><br />
Von all dem könnt ihr bestimmt bereits verstehen, das der <strong>Grundaufbau einer Klasse wie folgend aussieht:<br />
<pre>
<code>public class KlassenName{
// DATEN: Variablen
// METHODEN: Funktionen
// Innere Klassen
}
Dieser Code muss in einer Java-Datei mit dem Namen "<strong>Klassen_Name.java" abgespeichert werden. Zusätzlich sollte ihr auch folgendes beachten:
<ul>
<li>Alle DATEN sollten privat sein, aber manchmal definieren wir auch globale um das programmieren zu verleichtern.
<li>Die METHODEN sind meistens global, außer es handelt sich um Methoden die von anderen Methoden der Klasse ausgeführt werden und nicht nützlich sind vom Objekt, wenn dieses in einer anderen Klasse verwendet wird.
<br />
Es gibt zwei <strong>grundsätzliche Typen von Klassen:
<ol>
<li>Main oder <strong>Treiber Klasse (vom englischen Driver), die die main-Funktion enthält und die anderen zum erstellen von Objekten verwendet.
<li><strong>Objekt Klassen, welche von der Treiber Klasse zu Objekten "verwandelt" werden.
Fangen wir dann mal mit dem ersten Typen an!
<hr />
<h2>Main oder "Treiber" Klasse Diese Klasse <strong>enthält die main-Funktion vom ganzen Java-Programm und wird <strong>als erstes ausgeführt. Sie benutzt die anderen Klassen um mit denen Objekte zu erstellen. Dabei können wir:
<ul>
<li>auf den Wert einer Variable eines gewissen Objekts zugreifen und diesen z.B. ändern
<li>Funktionen eines Objektes ausführen
<li>mehrere Objekte vergleichen usw.
Der <strong>Aufbau einer solchen Klasse ist also:<br />
<pre>
<code>public class KlassenName{
//DATEN: Variablen und Objekte von Objekt-Klassen
//METHODEN: die main-Methode (die nur hier existiert) und andere
//meistens verwenden wir nur Methoden der Objekte
public static void main(String[] args){ // Main Methode
}
// Innere Klassen: diese könnten z.B. die verwendeten Objekt-Klassen sein
}
<br />
Der Klassen Name für die Treiber-Klasse ist meistens "Driver". Und das ist auch was ihr gerade benötigt. Gehen wir also jetzt in Objekt Klassen ein!
<hr />
<h2>Objekt Klassen und Konstruktoren Objekt Klassen werden als Objekte in der Treiber-Klasse verwendet. Das heißt das diese folgendes enthalten müssen:
<ul>
<li>Informationen, Attribute oder Eigenschaften (Variablen) die ein Objekt beschreiben
<li>Methoden die uns bei der Verwendung dieser Informationen helfen
Eine Objekt-Klasse <strong>hat natürlich keine Main-Methode und wird erst verwendet, oder besser gesagt erstellt, mit Hilfe vom "new" Modifizierer, den wir auch letztes mal bei Feldern gesehen haben. Aber was genau passiert wenn wir "new" verwenden? Mit Hilfe von "new" wird die Klasse ein Objekt, indem ein so genannter <strong>Konstruktor (constructor auf Englisch) ausgeführt wird. Diesen Konstruktor können wir selbst erstellen, aber es ist auch immer ein <strong>Standard oder "default" <strong>Konstruktor bereits definiert. Erstellen wir einen selber, wird dann dieser bereits enthaltene Konstruktor überschrieben (override auf Englisch). Der Standard Konstruktor hat keine Parameter und erstellt ein "Leeres" Objekt. Eine Konstruktor ist eine Methode die "public" ist und keinen Rückgabe-Wert (nicht mal void!) hat, so das diese von überall erreichbar ist und nichts zurückgibt.<br /><br />
Ein Konstruktor wird wie folgend geschrieben:<br />
<pre>
<code>// Standard Konstruktor
public KlassenName(){
}
// Selbst-geschriebener Konstruktor
public KlassenName(//Parameter){
// Eigener Code der z.B. Variablen initialisieren kann
}
// wir können unendlich viele haben!
<hr />
<h2>Getters und Setters Wie vorhin bereits erwähnt wurde sind die Daten meistens Privat. Das heißt aber nicht das andere Klassen keinen Zugriff auf diese Variablen mit einer anderen Sicheren und Kontrollierbaren Weise haben! Wenn eine gewisse Information Privat ist definieren wir so genannte <strong>Getter und Setter Methoden für diese Variable, so dass diese "normal" verwendet werden kann. Der <strong>Getter (vom englischen Wort "get", welches "erhalten" bedeutet) ist eineMethode mit dem selben Datentyp wie die Variable, ohne Parameter, welche den Wert der Variable zurückgibt. Der <strong>Setter (vom englischen Wort "set", welches "setzen" bedeutet) ist eine Methode welche vom Datentyp void ist und einen Parameter hat, welcher den Wert den wir zu der Variable geben wollen enthält. Dabei kontrollieren wir ob der Wert "richtig" ist. Sagen wir mal wir reden über eine Kontonummer. Diese darf natürlich keinen negativen Wert haben. Das können wir sehr leicht beim Setter von der Kontonummer kontrollieren!<br /><br />
Diese Methoden, für eine Variable vom Typen "variable_type" mit Namen 'v', sehen wie folgend aus:
<pre>
<code>//Getter
public variable_type getVariable(){
return v;
}
//Setter
public void setVariable(variable_type v){
// Die Variable dieser Klasse (this.v) nimmt den Wert vom Parameter 'v'
this.v = v;
}
<hr />
<h2>toString() Methode Die <strong>Zeichenketten (String) Darstellung eines Objekts/einer Klasse kann sehr leicht mit der Methode "toString()" genommen werden. Dies ist eine enthaltene Methode, die wir <strong>überschreiben (override auf Englisch), so dass wir am Ende das bekommen das wir wollen. Dabei verketten wir meistens die Werte von allen Variablen/Daten in der Objekt-Klasse, so dass diese ein gewisses Format haben. <br /><br />
Sagen wir mal wir haben eine Objekt-Klasse welche eine Zeichenkette mit Namen "name" und eine Ganzzahl mit Namen "alter" enthält. Das heißt das wir eine Person darstellen mit Namen und Alter. Die toString() Methode könnte wie folgend aussehen:<br />
<pre>
<code>@Override // zum überschreiben
public String toString() {
// Wir wollen folgendes ausdrucken:
// "Name: nameWert, Alter: alterWert"
// In Code ist das:
return "Name: " + name + ", Alter: " + alter;
}
<br />
Ähnlich kann man auch die Methode "<strong>equals()" überschreiben, welche zum vergleichen von Klassen verwendet wird. Die Methode "equals()" gibt einen Boolean-Wert zurück.
<hr />
<h2>Methoden Die Erstellung "eigener" Methoden ist sehr ähnlich und abhängig vom Klassen-Typ. Bei Objekt-Klassen erstellen wir Globale (public) Methoden, genau wie wir auch die Getter und Setter definiert haben. Das sieht wie folgend aus:<br />
<pre>
<code>public Rückgabetyp MethodenName(//Parameter){
//Code
return v; // Wenn "void" braucht man das nicht
}
<br />
Bei der Treiber-Klasse muss man die Methoden als "public static" definieren, da hier ja kein Objekt erstellt wurde. Bei Objekt-Klassen wird ja ein gewisser Speicher zugewiesen, da wir die Methoden mit Hilfe des Objekts ausführen, welches "erstellt" wurde. Eine Methode sieht also dann wie folgend aus:<br />
<pre>
<code>public static Rückgabetyp MethodenName(//Parameter){
//Code
return v; // Wenn "void" braucht man das nicht
}
<br />
Der eigentliche Unterschied ist also das wir das Stichwort "static" verwenden müssen!
<hr />
<h2>Komplettes Beispielprogramm Sagen wir mal wir wollen ein Programm erstellen welches Studenten-Objekte erstellt und dessen Werte ausdruckt. Das heißt das wir zwei Klassen brauchen: Die Treiber-Klasse und eine Objekte-Klasse für den Studenten. Wir werden 2 Studenten-Objekte erstellen und ausdrucken. Beim ersten werden die Daten mit Hilfe von den Getter und Setter Methoden initialisiert. Beim zweiten werden wir das selbe mit Hilfe eines <strong>überladenen (overloaded auf Englisch) <strong>Konstruktors machen, der die Werte der Variablen als Parameter nimmt. Der zweite wird zusätzlich mit Hilfe der toString() Methode bei der Konsole ausgedruckt. Ein Student wird eine ID, einen Namen und einen Nachnamen haben, welche vom Typ Integer, String und String sein werden. Diese Werte werden keine Eingabe vom Benutzer sein.<br />
<h3>Treiber-Klasse (Driver):
<p dir="auto">
<pre><code>public class Driver { // Driver.java
public static void main(String[] args) {
// 2 Studenten/Objekte
Student s1;
Student s2;
// Standard Konstruktor verwenden
s1 = new Student();
// Werte mit Setters setzen
s1.setID(100);
s1.setName("Tom");
s1.setNachname("Williams");
// Ausdrucken mit Hilfe von Getters
System.out.println(s1.getID() + " " + s1.getName() + " " + s1.getNachname());
// Überladenen Konstruktor verwenden
s2 = new Student(101, "John", "Smith");
System.out.println(s2);
}
}
<p>
<p dir="auto"><h3>Studenten Klasse (Student):<p>
<p dir="auto">
<pre><code>public class Student { // Student.java
// DATEN
private int ID;
private String name;
private String nachname;
// METHODEN
// Konstruktoren
// Standard Konstruktor
public Student() {
ID = 0;
name = surname = null;
// wir könnten hier auch die Setter verwenden
}
// Überladener Konstruktor
public Student(int ID, String name, String nachname) {
this.ID = ID;
this.name = name;
this.nachname = nachname;
// wir könnten hier auch die Setter verwenden
}
// Getters-Setters
// ID
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
// Name
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// Nachname
public String getNachname() {
return nachname;
}
public void setNachname(String nachname) {
this.nachname = nachname;
}
// Andere Methoden
@Override
public String toString() {
return ID + " " + name + " " + nachname;
}
}
<p>
<br />
Beim Ausführen wird natürlich folgendes ausgedruckt:<br />
<em>
100 Tom Williams<br />
101 John Smith
<hr />
<h2>Referenzen:
<ol>
<li><span><a href="http://www.willemer.de/informatik/java/javaclas.htm" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">http://www.willemer.de/informatik/java/javaclas.htm
<li><span><a href="http://www.programmierenlernenhq.de/klassen-in-java/" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">http://www.programmierenlernenhq.de/klassen-in-java/
<li><span><a href="http://www.programmierenlernenhq.de/methoden-in-java-was-sind-methoden-und-wie-werden-sie-verwendet/" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">http://www.programmierenlernenhq.de/methoden-in-java-was-sind-methoden-und-wie-werden-sie-verwendet/
<li><span><a href="http://www.codeadventurer.de/?p=233" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">http://www.codeadventurer.de/?p=233
<li><span><a href="https://steemit.com/programming/@drifter1/programming-java-classes-and-methods" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">https://steemit.com/programming/@drifter1/programming-java-classes-and-methods
Der Artikel ist zu 90% eine Übersetzung von meinen englischen Artikel, aber enthält ein paar zusätzliche Informationen. Die Referenzen haben dabei geholfen die richtigen deutschen Begriffe zu finden und zu verwenden, da ich Programmieren nicht in Deutsch, sondern in Englisch gelernt habe.
<hr />
<h2>Vorherige Artikel
<ul>
<li> <a href="https://steemit.com/programmieren/@drifter2/programmieren-in-java-von-c-nach-java" target="_blank" rel="nofollow noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Von C nach Java -> Ähnlichkeiten mit C, OOP, Ein- und Ausgabe über die Konsole, Array-Feld Objekt, C-like Beispielprogramm
<hr />
<h2>Schlusswort<p dir="auto"><span><img src="https://images.hive.blog/0x0/https://steemitimages.com/0x0/https://steemitimages.com/0x0/https://media.giphy.com/media/ybITzMzIyabIs/giphy.gif" />
<p dir="auto">Keep on drifting! ;)
<span>
Und das war's dann auch mit dem heutigen Artikel und ich hoffe euch hat dieser Artikel gefallen! Beim nächsten Artikel werden wir über die so genannte Komposition von Objektes reden. Zusätzlich werden wir auch mehr in Arrays-Felder eingehen, etwas das uns in ArrayList Objekte bringen wird, mit denen wir "dynamische" Felder erstellen können.
<img src="https://images.hive.blog/0x0/https://steemitimages.com/0x0/https://steemitimages.com/DQmecufxEjbsrjrCLHDzeXNUvTXaCoWbVvhWtHmWjURcnuC/red%20atom.gif" />
we love coding
Reply !stop to disable the comment. Thanks!Hello! Your post has been resteemed and upvoted by @ilovecoding because ! Keep up good work! Consider upvoting this comment to support the @ilovecoding and increase your future rewards! ^_^ Steem On!
This post has been voted on by the SteemSTEM curation team and voting trail in collaboration with @curie.
If you appreciate the work we are doing then consider voting both projects for witness by selecting stem.witness and curie!
For additional information please join us on the SteemSTEM discord and to get to know the rest of the community!
Congratulations @drifter2! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
<p dir="auto"><a href="http://steemitboard.com/@drifter2" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link"><img src="https://images.hive.blog/768x0/https://steemitimages.com/70x80/http://steemitboard.com/notifications/voted.png" srcset="https://images.hive.blog/768x0/https://steemitimages.com/70x80/http://steemitboard.com/notifications/voted.png 1x, https://images.hive.blog/1536x0/https://steemitimages.com/70x80/http://steemitboard.com/notifications/voted.png 2x" /> Award for the number of upvotes received <p dir="auto"><sub><em><a href="https://steemitboard.com/@drifter2" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Click here to view your Board of Honor<br /> <sub><em>If you no longer want to receive notifications, reply to this comment with the word <code>STOP <p dir="auto"><strong><span>Do not miss the last post from <a href="/@steemitboard">@steemitboard: <table><tr><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-resteem-and-resteemed-added" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link"><img src="https://images.hive.blog/768x0/https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png" srcset="https://images.hive.blog/768x0/https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png 1x, https://images.hive.blog/1536x0/https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png 2x" /><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-resteem-and-resteemed-added" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">SteemitBoard Ranking update - Resteem and Resteemed added <blockquote> <p dir="auto">Support <a href="https://steemit.com/@steemitboard" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">SteemitBoard's project! <strong><a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1" target="_blank" rel="noreferrer noopener" title="This link will take you away from hive.blog" class="external_link">Vote for its witness and <strong>get one more award!