Einführung in Java Arne Hüffmeier Michelle Liebers, Dennis Hoffmann Tilman Lüttje, Jean Wiele Angelehnt an Java-Vorkurs der Freitagsrunde 1 / 28
1 Äußere Form Kommentare Formatierung Schreibweise 2 ArrayList Die Liste 3 Vererbung Einfache Vererbung 4 API 2 / 28
Kommentare Wie war das noch gleich? Nun können wir Programme schreiben, aber was bringt uns all das, wenn wir später nicht mehr wissen, was wir getan haben? Man bräuchte eine Art Notizzettel, um sich merken zu können, was im Quelltext steht. Die Lösung: Kommentare! 3 / 28
Kommentare Eine alte Methode Gucken wir uns ein Beispiel an: p u b l i c s t a t i c i n t f ( i n t x ) { i n t v1, v2, v3 ; v1 = 1 ; v2 = 1 ; f o r ( i n t i = 2 ; i < x ; i ++) { v3 = v1 ; v1 += v2 ; v2 = v3 ; } r e t u r n v1 ; } Wer weiß was diese Methode ausgibt? Ist es gut zu erkennen? 4 / 28
Kommentare Die Kommentare Ein paar Kommentaren machen diese Methode deutlich übersichtlicher Inlinekommentar // Kommentar b i s zum Ende d e r Z e i l e Oft mitten im Code zu finden Meistens ein Hinweis was an der Stelle passiert Blockkommentar / Geht u e b e r mehrere Z e i l e n / Ein mehrzeilige Beschreibung der Vorgänge an der Stelle. Kann auch innerhalb einer Zeile stehen, da er nur vom /* bis zum */ geht. 5 / 28
Kommentare JavaDoc Es gibt noch einen dritten Kommentartyp, den JavaDoc-Kommentar. / Ein Satz d e r d i e K l a s s e o d e r Methode b e s c h r e i b t. V i e l e weitere zum genauen Erklaeren. @author Arne H u e f f m e i e r / JavaDoc wird verwendet, um anderen Hilfestellung zu geben, beim Umgang mit dem eigenen Programm, oder sich selbst. JavaDoc unterscheidet sich von normalen Blockkommentaren, dass er mit /** statt mit /* eingeleitet wird. JavaDoc schreibt man immer über die zugehörige Methode oder Klasse. 6 / 28
Kommentare Übersicht über JavaDoc Besonderheiten @author Angabe über den Autor der Klasse. @param x Angabe über den Parameter x, was der sein soll, oder was damit geschehen wird. @return Angabe über den Rückgabewert der Methode. @version Angabe zur Version des Programms. Zudem hat ein Satz in JavaDoc mit einem Punkt beendet zu werden. Gucken wir uns den Code noch einmal an. 7 / 28
Kommentare Eine alte Methode / Methode zum Ausgeben d e r F i b o n a c c i z a h l von x. @param x Zahl von der wir d ie F i b o n a c c i z a h l wollen. @ r e t u r n Die F i b o n a c c i z a h l an s t e l l e x. / p u b l i c s t a t i c i n t f ( i n t x ) { // V a r i a b l e n zum a r b e i t e n. i n t v1, v2, v3 ; v1 = 1 ; // i n i t i a l i s i e r e n d e r V a r i a b l e n mit 1. v2 = 1 ; // f i b ( 1 ) = 1 && f i b ( 2 ) = 1 / S o l a n g e w i r noch n i c h t d i e x. z a h l e r r e i c h t haben. und x g r o e s s e r a l s 2 i s t / f o r ( i n t i = 2 ; i < x ; i ++) { // v1 i s t d i e g r o e s s e r e Zahl. v3 = v1 ; // v1 z w i s c h e n s p e i c h e r n v1 += / v1 + / v2 ; // v2 a u f v1 a u f a d d i e r e n v2 = v3 ; // das a l t e v1 in v2 abspeichern // n a e c h s t e r I t e r a t i o n s s c h r i t t } // d i e g r o e s s e r e d e r b e i d e n F i b o n a c c i z a h l e n i s t i n v1 // und damit d i e an S t e l l e x. r e t u r n v1 ; } 8 / 28
Kommentare Eine alte Methode Deutlich übersichtlicher so, oder? Tut euch selber und allen, die euren Code irgendwann mal lesen werden, den Gefallen und kommentiert ihn ausführlich. 9 / 28
Formatierung Die richtige Ausrichtung Hier ist ein Fehler enthalten: p u b l i c s t a t i c i n t f ( i n t x ) { i n t k = 0 ; f o r ( i n t i = 0 ; i <= x ; i ++) { i f ( i % 2 == 0) { k = k + i ; } } Dieser Fehler wäre offensichtlicher gewesen, hätte man eingerückt. p u b l i c s t a t i c i n t f ( i n t x ) { i n t k = 0 ; f o r ( i n t i = 0 ; i <= x ; i ++) { i f ( i % 2 == 0) { k = k + i ; } } Wir sehen sofort, da fehlt eine Klammer! 10 / 28
Formatierung NetBeans NetBeans ist nett zu uns. Es hat extra eine Funktion zur Autoformatierung, welche über das Tastenkürzel den Quellcode richtig formatiert. Alt + Shift + F 11 / 28
Schreibweise Richtig benennen S t r i n g Meine Oma f a e h r t im H u e h n e r s t a l l Motorrad = " Hallo Welt " ; Eine sinnvolle Benennung von Variablen, Methoden oder Klassen gehört zum guten Ton. Auch Java hat einige Konventionen, die, wenn man sich an sie hält, lesbaren und verständlichen Code produzieren. 12 / 28
Schreibweise Richtig benennen Variablen und Methodennamen mit Kleinbuchstaben anfangen. Variablen sinnvoll nach ihrem Verwendungszweck benennen. Methoden ebenso. Klassen großschreiben. Zählvariablen i,j,k nennen. CamelCase statt Unter- oder Bindestriche verwenden. 13 / 28
Schreibweise CamelCase Was ist dieses CamelCase eigentlich? CamelCase ist eine Schreibweise von zusammengesetzten Wörtern. So wird im CamalCase aus gib mir Fisch durch das Streichen der Leerzeichen und Großschreiben des ersten Buchstaben des nächsten Wortes gibmirfisch 14 / 28
Schreibweise Beispiele für gute Namen GUT Fehler ArrayIndexOutOfBoundsException Index eines Arrays ist außerhalb der Grenze Methode ischarinword Ist das Zeichen im Wort? Variable isinword Impliziert Ja/Nein- Frage boolean Methode convert Variable foo schlecht Konvertiert zu was? Könnte alles mögliche sein 15 / 28
Die Liste Ein besseres Array Java gibt uns eine Möglichkeit Arrays mit variabler Länge zu erstellen. Die ArrayList ist einem Array sehr ähnlich. Wir können die Länge ändern. auf einzelne Elemente zugreifen. sie automatisch sortieren lassen. 16 / 28
Die Liste Wie bekomme ich diese Liste? Nun erklären wir euch, wie man eine ArrayList nutzt. Zur Vorbereitung: i m p o r t j a v a. u t i l. A r r a y L i s t ; Erklärung import : sagt Java, dass wir etwas von außerhalb unserer Klasse verwenden wollen. java.util.arraylist : ist der Verweis auf die Quelle, die wir verwenden wollen. Diese Anweisung kommt über den Beginn der Klasse. 17 / 28
Die Liste In Code Hier ein Beispiel: i m p o r t j a v a. u t i l. A r r a y L i s t ; p u b l i c c l a s s Test { p r i v a t e A r r a y L i s t <I n t e g e r > a r r a y L i s t ; } p u b l i c Test ( ) { a r r a y L i s t = new A r r a y L i s t <>() ; } ArrayList erklärt ArrayList<Integer> : Dies deutet an, dass wir eine ArrayList mit Integern machen wollen. Ähnlich wie int[]. ArrayList<>() : Konstruktor der ArrayList. Gleichbedeutend wie ArrayList<Integer>(); Dies erstellt uns eine Liste der Länge 0. 18 / 28
Die Liste Der Harken Warum schreibe ich da Integer und nicht einfach int? Weil eine ArrayList nur mit Objekten funktioniert. Ein int ist kein Objekt, darum nutzen wir Integer, welcher eine Objektvariante des int ist. Und was bringt mir das für Vorteile? Ein Array mit einer beliebigen Länge! So geht es 19 / 28
Die Liste Hinzufüegen Einige nützliche Beispiele: Eintrag hinzufügen a r r a y L i s t. add ( 5 ) ; 5 wird ans Ende des Arrays hinzugefügt. Eintrag abfragen a r r a y L i s t. g e t ( 0 ) ; Gibt das erste Element der Liste zurück. 20 / 28
Die Liste Hinzufüegen Einige nützliche Beispiele: Länge abfragen a r r a y L i s t. s i z e ( ) ; Gibt uns die Anzahl der Einträge in unserer ArrayList zurück. Eintrag entfernen a r r a y L i s t. remove ( 0 ) ; Löscht das erste Element der ArrayList. 21 / 28
Die Liste Weitere Features Kann die auch mehr? Ja, in der Java-API steht noch viel mehr. 22 / 28
Einfache Vererbung Die Bahn ist nicht zufrieden Es ist zwar schön, dass wir die Wagen eine bestimmte Klasse zuteilen können, aber die Deutsche Bahn will nun Doppelstockwaggons verwenden. Wie setzen wir das nun um? Wir wollen nur ungern wieder von vorn anfangen, also verwenden wir unseren Waggon weiter! Betrachten wir die Unterschiede Wir können oben und unten unterschiedliche Klassen haben Wir können oben und unten unterschiedlich viele Passagiere haben Eine Idee: Wir erweitern den Waggon um passagiereoben und klasseoben! 23 / 28
Einfache Vererbung Der neuere Waggon So sähe unser Waggon wie folgt aus p u b l i c c l a s s Waggon { p r i v a t e i n t k l a s s e, k l a s s e O b e n ; p r i v a t e i n t p a s s a g i e r e, p a s s a g i e r e O b e n ; p u b l i c Waggon ( i n t k l a s s e, i n t k l a s s e O b e n ) { t h i s. k l a s s e = k l a s s e ; t h i s. k l a s s e O b e n = k l a s s e O b e n ; p a s s a g i e r e = 0 ; p a s s a g i e r e O b e n = 0 ; } } Natürlich werden auch die Setter und Getter Methoden erweitert um diese beiden Attribute. 24 / 28
Einfache Vererbung Ein schwieriger Kunde Kaum ist unsere Version des Doppelstockwaggons fertig, ruft der Bahnchef wutentbrannt bei uns an. Er beschwert sich, dass er nun nur noch Doppelstockwaggons verwenden kann, aber ein ICE keine hat. Wir sollen dieses Problem umgehend beheben, aber die Möglichkeit lassen, einen Zug mit Doppelstockwaggons ausstatten zu können. Wir bräuchten also weiterhin unseren alten Waggon und müssen einen Weg finden, einen Sonderfall davon zu erstellen, den wir Doppelstockwaggon nennen sollen. Java gibt uns da eine Möglichkeit. Sie nennt sich Vererbung. 25 / 28
Einfache Vererbung Vererbung Wir haben schnellstmöglich unseren Waggon wieder zurück gebaut. Nun kommt der zweite Versuch, einen Doppelstockwaggon zu erstellen. 26 / 28
Einfache Vererbung Zweiter Versuch eines Doppelstockwaggons p u b l i c c l a s s Doppelstockwaggon e x t e n d s Waggon { p r i v a t e i n t k l a s s e O b e n ; p r i v a t e i n t p a s s a g i e r e O b e n ; p u b l i c Doppelstockwaggon ( i n t k l a s s e, i n t k l a s s e O b e n ) { s u p e r ( k l a s s e ) ; t h i s. k l a s s e O b e n = k l a s s e O b e n ; p a s s a g i e r e O b e n = 0 ; } Doppelstockwaggon erklärt extends sagt Java, dass unser Doppelstockwaggon von Waggon erbt, also alles kann, was Waggon kann und auch als Waggon behandelt werden kann. super() ruft den Konstruktor der Klasse auf, von der wir geerbt haben. In dem Fall wird also dadurch ein Waggon erstellt, welchen wir nur ergänzen. Die Klasse Waggon wird aus Sicht des Doppelstockwaggons als Superklasse bezeichnet, weil wir den Konstruktor des Waggons mit super aufrufen. 27 / 28
Die Java API Das beste Nachschlagewerk für Java. http://docs.oracle.com/javase/8/docs/api/ oder nach Java API googlen. Java ist eine Insel ist ebenfalls sehr empfehlenswert http://openbook.galileocomputing.de/javainsel/ 28 / 28