Ausgerechnet jetzt noch über Java zu schreiben, mag etwas spät wirken, aber ich wollte mein Wissen noch einmal ordnen. Deshalb schreibe ich hier auf, was man wissen sollte, wenn man mit IntelliJ Idea in Java einsteigt. Das Ganze ist als persönliche Notizsammlung gedacht.
Worauf man bei der Java-Installation achten sollte
Wer aktuell das OracleJDK verwendet, darf es kostenlos nur für private Zwecke und zur Entwicklung nutzen. Wenn man Java nur zum Lernen einsetzt, muss einen das überhaupt nicht kümmern — wer Java aber in Produktion einsetzen will, muss zahlen. Also Vorsicht.
Es gibt die verschiedensten Binaries, und diverse Anbieter verkaufen kostenpflichtigen Support — in der Java-Welt riecht es förmlich nach Geld. :D Nach etwas Recherche konnte ich nicht wirklich sagen, welches JDK das beste ist, aber wenn man es einfach nutzen will, ohne ans Geld zu denken, fährt man mit dem LTS von AdoptOpenJDK(HotSpot) gut. Solange man nicht in einer richtig großen Enterprise-Umgebung unterwegs ist — oder solange man Probleme selbst lösen kann — lässt es sich dauerhaft kostenlos verwenden.
Wie lange der Support (Bugfixes usw.) jeweils läuft, lässt sich hier nachschlagen:
https://adoptopenjdk.net/support.html
Andererseits: Vergleicht man das mit Swift — zwar Open Source, aber fest an Apple gebunden, mit Face-to-face-Support nur einmal im Jahr auf der WWDC, und selbst der ist verlost und teuer —, dann kann kostenpflichtiger Support je nach Use Case durchaus sinnvoll sein. Swift hat zwar auch Foren, aber Antworten gibt es dort höchstens auf Best-Effort-Basis, und dass sich jemand um den eigenen konkreten Fall kümmert, ist praktisch ausgeschlossen. (Ich selbst arbeite hauptsächlich mit Swift.)
Wofür will ich Java eigentlich nutzen?
Zunächst einmal fürs Algorithmen-Lernen und für Competitive Programming. Außerdem sind unzählige Libraries und Architekturen aus Java hervorgegangen, und Programmierparadigmen, die es im klassischen Java nicht gab — etwa Functional Programming —, wurden inzwischen aufgenommen. Als Stoff, um Informatik umfassend zu lernen, ist Java daher wohl die beste Wahl. Es ist nicht so kantig wie Go oder Rust und wirkte auf mich deshalb lange etwas unspektakulär — aber einmal im Kreis gedacht, ist es einfach eine praktische Sprache.
——Zum Schluss: Was ist aus Ihrer Sicht „das Gute an Java“?
Kishida: Java ist eine Sprache, die alles kann. Desktop-Apps, Server-Side, Smartphone-Apps, Business-Anwendungen, Service-Anwendungen — alles ist möglich. Für Machine Learning ist es noch nicht so gut geeignet, aber das wird in Zukunft sicher deutlich einfacher. Wer Java beherrscht, kann sich in die verschiedensten Bereiche vorwagen — das sehe ich als großen Vorteil.
Und wie vorhin schon angesprochen: Java bemüht sich kontinuierlich, sich an neue Basistechnologien anzupassen. Wer dieser Entwicklung folgt, hat automatisch die Motivation, selbst neue Technologien zu lernen. Es geht ja nicht nur um die Sprache — Libraries, Frameworks und die Laufzeitumgebung, alles zusammen ist Java. Diese Bandbreite ist das Beste an Java.
(aus: https://employment.en-japan.com/engineerhub/entry/2019/10/29/103000)
Eine main function anlegen
Eine Eigenheit(?) von Java ist, dass der Weg bis zum Hello World lang ist.
Um eine Java-Anwendung auszuführen, braucht man zuerst eine main function.
Sie jedes Mal per Copy-and-paste einzufügen ist lästig — praktischer ist es, wenn die Funktion automatisch erzeugt wird, sobald man main… zu tippen beginnt.
https://www.jetbrains.com/help/idea/creating-and-running-your-first-java-application.html
Die Build-Tools kennenlernen
Bekannt sind vor allem diese:
Wer heute ein neues Java-Projekt startet, nimmt fast immer gradle, gelegentlich maven. gradle und maven benutze ich ohnehin ständig und kenne mich damit aus, ant habe ich dagegen kaum je verwendet. Ich werde es wohl auch nie brauchen, aber ein paar Notizen dazu schaden nicht.
ant
Das älteste der genannten Build-Tools. In NetBeans wurde es tatsächlich immer noch verwendet (Überraschung!).
Es ist in Java geschrieben und wurde als universelles Build-Tool konzipiert — angeblich kann man damit sogar C-Code kompilieren, in freier Wildbahn gesehen habe ich das allerdings noch nie. :D Man kann eigene Erweiterungen (antlibs) schreiben und damit eigene Tasks hinzufügen.
Zur Definition der Tasks dient statt eines Makefile eine Datei namens build.xml.
ant selbst bringt keine Verwaltung von Modul-Abhängigkeiten mit. Man kann Abhängigkeiten hinzufügen, indem man jar-Dateien in den Classpath legt; wer sie automatisch verwalten will, holt sich ivy dazu.
ivy
Ein Dependency-Management-Tool. Abhängigkeiten lassen sich damit in schlankerem XML beschreiben als bei maven. Üblicherweise wird es als Ergänzung zu ant eingesetzt.
Man legt eine ivy.xml wie diese an:
<ivy-module version="2.0">
<info organisation="org.apache" module="hello-ivy"/>
<dependencies>
<dependency org="commons-lang" name="commons-lang" rev="2.0"/>
<dependency org="commons-cli" name="commons-cli" rev="1.0"/>
</dependencies>
</ivy-module>
Und ergänzt in der build.xml Folgendes:
<project xmlns:ivy="antlib:org.apache.ivy.ant" name="hello-ivy" default="run">
...
<!-- =================================
target: resolve
================================= -->
<target name="resolve" description="--> retrieve dependencies with Ivy">
<ivy:retrieve/>
</target>
</project>
Beim Build mit ant werden die Abhängigkeiten dann automatisch aufgelöst.
Damals muss das revolutionär gewesen sein …
An IntelliJ gewöhnen
Da hilft nur eines: es jeden Tag öffnen. Auf der aktuellen Homeoffice-Welle (Stand April 2020 grassiert weltweit ein neuartiges Virus namens Coronavirus) verbringe auch ich meine Tage grübelnd zu Hause und versuche, die übrige Zeit zu nutzen, um IntelliJ zu öffnen und irgendetwas zu programmieren. Java in einem Texteditor zu schreiben finde ich persönlich mühsam (unmöglich ist es nicht). Wer die Hotkeys von IntelliJ beherrscht, ist meiner Meinung nach deutlich produktiver. Allerdings bieten inzwischen diverse Texteditor-Erweiterungen auf LSP-Basis nahezu IDE-gleiche Funktionen, sodass es leichter geworden ist als früher.
Am Ende zählt aber vor allem eines: einfach still und konzentriert Code schreiben. Ich lege mir jedenfalls Effective Java griffbereit hin und gebe mein Bestes.