Hallo zusammen,
ich nehme derzeit an einer Akademie zum Java Fullstack Software Engineer teil. In den kommenden Wochen möchte ich hier meine Mitschrift, so gut es geht, aufzeichnen und mitteilen. Hier ist das, was ich vom ersten Tag gelernt und behalten habe:
Block 01 Einführung in die Tool-Landschaft (Eclipse, GIT/GitLab, Build-Prozess mit Maven/Gradle)
Evolution eines Java Entwicklers
Der typische Java Entwickler durchläuft mehrere Stufen. Am Anfang schlägt er sich mit der Syntax und Datentypen rum und am Ende mit Aspekt Orientierter Programmierung:

- Interfaces sind auch Datentypen
- Design Pattern: Bubblesort, Singelton (Nur ein Object er Klasse (z.B. nur ein Bundestag))
- Reflection API
- AOP-Aspekt orientierte Progammierung
- Dependency Incection
Noch dramatischer sieht das auf der Grafik von Oracle aus:

Quelle: java-developer-roadmap.png (aus dem Internet vom Trainer)
Die Umgebung eines Java Entwicklers:

Jeder Entwickler arbeitet auf einem lokalen Workspace. Zusätzlich hat er ein Repository, in welchen er seinen Workspace, aber auch Libraries aus anderen Quellen repliziert. Diese Daten werden in der Regel von einem Proxy (z.B. Nexus) geholt, welcher sie aus dem Internet holt.
Der Code wird in einem Projektverwaltungstool wie Gitlab oder Github mit mehreren Kollegen bearbeitet und zusammengefügt.
Pipelines (CI/CD) erstellen daraus Pakete.
Diese Pakete werden dann über Docker / Kybernetes auf Server deployt.
Nexus Einstellungen
Nexus ist ein Proxy, z.B. für MVN-Repositories.
Die Proxi-Eistellungen befinden sich unter dem Userverzeichns/.m2

In der pom.xml steht, welche jar-Files aus dem Internet in das Repository gelegt werden.
HelloWorld.java
Mit einem einfachen Editor (hier: Notepad++) erstellen wir unseren ersten Java-Code.
Zuerst schreiben wir nur:
public class HelloWorld {}
dann speichern wir es unter "HelloWorld.java" und compillieren es. Es gibt keine Fehlermeldung. Erst beim Aufrufen des Programms.
Also fügen wir die Hauptmethode hinzu.
String[] args bedeutet, dass der Main-Methode Parameter übergeben werden können (vom Typ String Vektor):


Es werden beim compilieren ganz viele Klassen geladen. Startet man das Java Programm mit -verbose kann man diese sehen:

Package
Im Workspace kann man seine Datei an einem beliebigen Platz/Order abspeichern. Um einen bezug zueinander zu haben, bzw. die Datei eindeutig zu beschreiben, fügen wir oben im Code den Befehl "package" hinzu. Die Notation ist in umgekehrter URL-Reihenfolge und immer klein geschrieben. Beispiel:

Paket erstellen
Folgendes ginge:
tar -czf mylib.tgz de
(Das Verzeichnis "de" wird in die Datei "mylib.tgzz" komprimiert.)
Besser ist aber:
jar -cf mylib.jar de

Den Inhalt kann man anzeigen mit:
jar -tf mylib.jar
Man kann auch ein Java Programm direkt aus einem jar-File aufrufen mit dem Parameter -classpath:

Dokumentation
der Befehl "javadoc" erzeugt zum Code eine dazugehörige Dokumentation, wenn diese im Code schon sauber gepflegt wurde. Dazu sollte sich der Programmierer angewöhnen dies auch zu tun.
/** läutet dabei die Kommentarzeilen ein, die durch javadoc ausgewertet werden */

Öffentliche Bibliotheken
Dies ist die "allwissende Müllhalde" , weil dort auch viel veraltetes drin steht:
https://docs.oracle.com/javase/8/docs/api/
Dort steht z.B. die Definition der Klasse "String" drin

Zusammenfassung Links + Kommandos:
------------------------------------------------------------------------------------------
Java RoadMap
- https://www.oracle.com/java/technologies/java-se-support-roadmap.html
MVN Repository
------------------
https://mvnrepository.com/
Versionsprüfung
-----------------
java -version // Version Laufzeitumgebung
javac -version // Version Compiler
JAR - JavaArchive:
---------------------
-> jar-Kommando
jar -cf mylib.jar de // Archiv erzeugen
jar -tf mylib.jar // Archiv-Inhalt anzeigen
java -classpath mylib.jar de.firma.abt.proj.HelloWorld // Ausführen eines Java-Programmes aus einen ava-Archiv herraus
Dokumentation
-----------------
Java-Doc-Kommentar
/**
……..
*/
javadoc -d doc HelloWorld.java
API - Applikaction Programming Interface
----------------------------------------------
https://docs.oracle.com/javase/8/docs/api/
https://docs.oracle.com/en/java/javase/11/docs/api/