ändern neue Java Versionen was an der Programmiersprache?

taschenrechner73

Neues Mitglied
hallo,
wir haben vor einigen Wochen in der Schule angefangen mit Java zu programmieren. Also ich kenne mich noch überhaupt nicht aus. Da ich mich parallel zum Unterricht noch einbischen weiterbilden möchte, will ich mir ein Buch kaufen. Evtl dieses hier: https://www.amazon.de/Java-von-Kopf-bis-Fuß/dp/3897214482/ref=cm_cr_arp_d_product_top?ie=UTF8
Jetzt die Frage: Das Buch scheint schon etwas älter zu sein (2006). Wenn ich jetzt mit aktuellem Java programmiere, gibt es da bedeutende Unterschiede zur Sprache oder Funktionsumfang? Sollte ich lieber ein aktuelleres Buch holen?
Vielen Dank schon mal für eure Hilfe!
 

Joose

Top Contributor
Die Grundlagen werden sich nicht ändern, aber es kann immer wieder mal neue Features geben in einer Java Version.
Welche neue Features so hinzugekommen sind mit den einzelnen Versionen kannst du hier nachlesen: https://de.wikipedia.org/wiki/Java-Technologie#Versionen

Also ich würde meinen ein Buch das auf Java 6, 7 oder 8 basiert sollte dir noch ausreichend Grundlagen vermitteln und dich gut an die Sprache heranführen. Aber wenn du schon auf Amazon schaust, dann würde ich direkt schauen ein aktuelles Buch zu bekommen ;)
 

DerShirkTV

Mitglied
Hallo taschenrechner73,
Ja, es gibt Änderungen, allerdings werden (fast) immer NUR neue Dinge ergänzt und alte Dinge nicht entfernt. Es gibt da zwar auch Ausnahmen, allerdings sind diese doch sehr speziell. Meinst du mit neuen Versionen Java 7/8 oder meinst du dieses ( meiner Meinung nach blöde) Fenster mit "Java-Update verfügbar"? Ich ignoriere dieses Fenster meistens.

LG DerShirkTV
 

taschenrechner73

Neues Mitglied
Danke schonmal für eure Antworten!!
Ich denke ich hole mir dann einfach dieses etwas ältere Buch, da es mir einfach am besten gefällt und die Java Version ja nicht so ein riesigen Unterschied macht. Was würden ihr als Profis denn eigentlich so für ein Buch empfehlen?
LG
 

eldrior

Aktives Mitglied
Ich habe viel mit "Java ist auch nur eine Insel" gelernt. Das ist ein Open Book, das man im Internet kostenlos lesen kann und dann, wenn es einem gefällt auch erwerben kann, um die Autoren etwas zu unterstützen.
 

JuKu

Top Contributor
Jetzt die Frage: Das Buch scheint schon etwas älter zu sein (2006). Wenn ich jetzt mit aktuellem Java programmiere, gibt es da bedeutende Unterschiede zur Sprache oder Funktionsumfang? Sollte ich lieber ein aktuelleres Buch holen?
Vielen Dank schon mal für eure Hilfe!

Definitiv! Auch wenn die Grundlagen lange Zeit die selben bleiben (Java 9 macht da schon wieder erste Ausnahmen und macht einige Dinge kaputt), solltest du lernen so zu programmieren, wie man es heute auch tun würde.
Was nützt es, wenn du einen uralten Standard von 2006 kannst, wo doch 2017 schon Java 9 raus kam und so viel dazu kam.

Mein Tipp:
Entweder liest du das Open Book, oder du holst dir das Java Buch "Java ist auch eine Insel", dann aber bitte gleich die neueste Version, damit du nicht mehrmals investieren musst:
https://www.amazon.de/Java-auch-ein...7402&sr=8-2&keywords=java+ist+auch+eine+insel

Ja, es gibt Änderungen, allerdings werden (fast) immer NUR neue Dinge ergänzt und alte Dinge nicht entfernt.

Falls du mit "fast" die über 1000 Klassen meinst, die in Java 9 entfernt wurden, dann lasse ich das gelten. Ansonsten ist das Quatsch. Zumal Jigsaw so viele Sachen kaputt macht, dass man viele Dinge neu schreiben müsste, wenn man jetzt überall Module verwenden wöllte.
 

Flown

Administrator
Mitarbeiter

InfectedBytes

Top Contributor
Falls du mit "fast" die über 1000 Klassen meinst, die in Java 9 entfernt wurden, dann lasse ich das gelten. Ansonsten ist das Quatsch. Zumal Jigsaw so viele Sachen kaputt macht, dass man viele Dinge neu schreiben müsste, wenn man jetzt überall Module verwenden wöllte.
Wenn man schon sowas schreibt, sollte man auch Belege dafür liefern...

Falls du darauf anspielst, dass durch das Modul System nun auch endlich interne APIs geschützt sind, so ist dass die Schuld der Anwender, welche eine API benutzen, die sie gar nicht nutzen sollten, da sie eben intern ist.
 

JuKu

Top Contributor

Falls du schon mit Jigsaw gearbeitet hast, wird dir aufgefallen sein, dass ganz viele Libraries (z.B. auch Netty, Vertx, Spring teilweise, LWJGL und libGDX) nicht mehr ordnungsgemäß arbeiten und Fehler ausspucken, da sie durch die neuen Module im Reflection eingeschränkt sind und nicht mehr auf einige Klassen zugreifen können, die sie vormals einmal brauchten.
Ein weiteres Beispiel wäre wohl sun.misc.Unsafe, eine interne Api zum Allozieren von nativem (Off Heap) Speicher, auf welche die Libraries jetzt nicht mehr zugreifen können, sobald man Module verwendet.

Genau aus diesem Grund hatte das Java EC (Java Executive Committee, welches jede Änderung am Java Standard absegnen muss) Jigsaw auch eine Zeit lang blockiert, siehe diesen Beitrag:
http://jukusoft.com/2017/05/10/java-9-jigsaw-wurde-abgelehnt/

Auch das JaxCenter Magazin hatte darüber berichtet:
https://jaxenter.de/java-9-jigsaw-interview-56962

Oracle hat allerdings innerhalb der 30 Tage Frist reagiert und Jigsaw ein klein wenig verbessert, sodass Jigsaw dann mit 24 von 25 Stimmen durchgewunken werden konnte. Die internen Apis bleiben (nur solange man keine Module nutzt) auch unter Java 9 per Default verfügbar, mit Java 18.3 (es wird kein Java 10 geben!) wird der Zugriff dann aber gänzlich gesperrt. D.h. die Library Entwickler haben jetzt knapp ein halbes Jahr Zeit um nachzubessern, ansonsten werden ihre Libraries dann nicht mehr unter den neuen Java Versionen funktionieren. Außerdem hat Oracle das Tool jdeps herausgebracht, mit welchen man quasi alle internen Inkompatibilitäten aufdecken kann.


Eine Liste aller entfernten Klassen findest du hier:
https://gunnarmorling.github.io/jdkapidiff/jdk8-jdk9-api-diff.html

Die meisten Klassen sind für den Otto-Normal-Verbraucher nicht relevant, aber wenn man mit Reflection gearbeitet hat, dann geht auch viel mehr kaputt. Das dürfte gerade Spring zum Verhängnis werden.

Zu der ganzen Thematik und den Java 9 Neuerungen gibts auf meiner Webseite übrigens auch einen Blog-Artikel:
http://jukusoft.com/2017/10/13/java-java-9-erschienen/
 
Zuletzt bearbeitet:

JuKu

Top Contributor
Wenn man schon sowas schreibt, sollte man auch Belege dafür liefern...

Eine Liste aller entfernten Klassen (--> Belege) habe ich in dem Beitrag oben drüber bereits gebracht.

Falls du darauf anspielst, dass durch das Modul System nun auch endlich interne APIs geschützt sind, so ist dass die Schuld der Anwender, welche eine API benutzen, die sie gar nicht nutzen sollten, da sie eben intern ist.

Das ist richtig, nur ist es leider so, dass viele Libraries diese internen Apis wie sun.misc.Unsafe nun einmal brauchten, um die Performance zu erzielen, die gefordert war. LWJGL oder libGDX wären damals ohne interne Apis gar nicht möglich gewesen, da man mit On Heap Speicher & GC niemals auf solch eine Performance gekommen wäre.
Desweiteren nutzt LWJGL mit Hilfe von sun.misc.Unsafe Pointer, um die Daten nicht erst vom Java Heap in den nativen Speicher für OpenGL kopieren zu müssen. Die bekanntesten Networking Libraries in Java nutzen an irgendeiner Stelle sun.misc.Unsafe. Klar sollten sie die nie benutzen, aber sie haben damit etwas möglich gemacht, was sonst damals niemals möglich gewesen wäre. Die neue Buffer Api von Java kam sowieso erst später und selbst die bringt nicht die selbe Performance, wie sun.misc.Unsafe, obwohl da (bei Direct Buffer) nur noch die Buffer Instanz vom GC verwaltet wird.
 

mrBrown

Super-Moderator
Mitarbeiter
Falls du schon mit Jigsaw gearbeitet hast, wird dir aufgefallen sein, dass ganz viele Libraries (z.B. auch Netty, Vertx, Spring teilweise, LWJGL und libGDX) nicht mehr ordnungsgemäß arbeiten und Fehler ausspucken, da sie durch die neuen Module im Reflection eingeschränkt sind und nicht mehr auf einige Klassen zugreifen können, die sie vormals einmal brauchten.
Ein weiteres Beispiel wäre wohl sun.misc.Unsafe, eine interne Api zum Allozieren von nativem (Off Heap) Speicher, auf welche die Libraries jetzt nicht mehr zugreifen können, sobald man Module verwendet.

Genau aus diesem Grund hatte das Java EC (Java Executive Committee, welches jede Änderung am Java Standard absegnen muss) Jigsaw auch eine Zeit lang blockiert, siehe diesem Beitrag:
http://jukusoft.com/2017/05/10/java-9-jigsaw-wurde-abgelehnt/

Auch das JaxCenter Magazin hatte darüber berichtet:
https://jaxenter.de/java-9-jigsaw-interview-56962

Oracle hat allerdings innerhalb der 30 Tage Frist reagiert und Jigsaw ein klein wenig verbessert, sodass Jigsaw dann mit 24 von 25 Stimmen durchgewunken werden konnte. Die internen Apis bleiben (nur solange man keine Module nutzt) auch unter Java 9 per Default verfügbar, mit Java 18.3 (es wird kein Java 10 geben!) wird der Zugriff dann aber gänzlich gesperrt. D.h. die Library Entwickler haben jetzt knapp ein halbes Jahr Zeit um nachzubessern, ansonsten werden ihre Libraries dann nicht mehr unter den neuen Java Versionen funktionieren. Außerdem hat Oracle das Tool jdeps herausgebracht, mit welchen man quasi alle internen Inkompatibilitäten aufdecken kann.
Wie schon mal gesagt: Alles interne Klassen die nie (und völlig zurecht) für diese Verwendung gedacht waren.

Eine Liste aller entfernten Klassen (--> Belege) habe ich in dem Beitrag oben drüber bereits gebracht.
Naja, nicht deine genannte 1000, sondern nicht mal 300. Und fast alle davon sind Builder für JavaFX, die schon Deprected waren.

Wie kommst du überhaupt auf 1000?
Und welche davon sind für irgendwen, der Java 8 nutzt, relevant?

Das dürfte gerade Spring zum Verhängnis werden.
Hm, Spring 5 unterstützt ganz offiziell Java 9...
 
Zuletzt bearbeitet:

InfectedBytes

Top Contributor
...
LWJGL oder libGDX wären damals ohne interne Apis gar nicht möglich gewesen, da man mit On Heap Speicher & GC niemals auf solch eine Performance gekommen wäre.
...
Klar sollten sie die nie benutzen, aber sie haben damit etwas möglich gemacht, was sonst damals niemals möglich gewesen wäre.
...
Ähm, nein?!
Natürlich war und ist das ganze auch vollkommen ohne sun.misc.Unsafe möglich und zwar indem die Entwickler (wie vorgesehen), für solche Dinge direkt eine C Library nutzen und diese per JNI aus Java heraus nutzen.
 

InfectedBytes

Top Contributor
Wenn man eine fremde API benutzt, welche nur für interne Zwecke gedacht ist, nur private constructor und singleton hat, der einzige öffentliche Zugang per Reflection sicherstellt das er nur intern benutzt wird und man somit zwangsweise per dreckigem Reflection Hack sich erst einmal eine Instanz davon holen muss, dann sollte man sich nicht wundern dass das in Zukünftigen Versionen möglicherweise nicht mehr geht.

Wenn du mit einem geklauten Schlüssel in ein fremdes Haus reingehst, würdest du dich doch auch nicht wundern wenn irgendwann einmal ein anderes Schloss in der Tür steckt. ;-)
 

JuKu

Top Contributor
Ähm, nein?!
Natürlich war und ist das ganze auch vollkommen ohne sun.misc.Unsafe möglich und zwar indem die Entwickler (wie vorgesehen), für solche Dinge direkt eine C Library nutzen und diese per JNI aus Java heraus nutzen.

Gut, dass wäre für die Entwickler aber noch umständlicher gewesen.
Aber ich glaube das ist der falsche Thread, um solche Grundsatz-Diskussionen über die Verwendung von internen Apis zu führen.
 

Flown

Administrator
Mitarbeiter
Gut, dass wäre für die Entwickler aber noch umständlicher gewesen.
Wenn sich jemand hingesetzt und eine gute Lib dafür geschrieben hätte, dann gäbe es das Problem mit Unsafe nicht.
Aber ich glaube das ist der falsche Thread, um solche Grundsatz-Diskussionen über die Verwendung von internen Apis zu führen.
Ich glaube es gibt gar keine Diskussion über interne API, denn per Definition, ist sie wissentlich nicht nach außen getragen und sollte auch nicht verwendet werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
N Fahrtrichtung eines selbstfahrenden Auto ändern Allgemeine Java-Themen 3
Z Java Testklassenvariable ändern im Hauptprogramm Allgemeine Java-Themen 5
L Uhrzeit von 24-Uhr zu 12-Uhr ändern Allgemeine Java-Themen 2
Thallius Zeitzone zu einem LocalDate hinzufügen aber ohne es zu ändern... Allgemeine Java-Themen 2
N Speicherort einer Datei im Explorer ändern Allgemeine Java-Themen 8
W Classpath Reflexion - Prüfen ob man auf ein Feld ändern kann Allgemeine Java-Themen 2
J Jasper Reports - Subreport zur Laufzeit ändern Allgemeine Java-Themen 6
N Variablen Array Länge ändern. Allgemeine Java-Themen 8
R Methoden Was fehlt mir bzw. muss ich bei der Methode countHarshabNumbers ändern damit ich die Harshad Zahlen im Intervall [51, 79] zählen kann? Allgemeine Java-Themen 19
R Was muss ich ändern, damit der Kreis links unten gezeichnet wird? Allgemeine Java-Themen 17
L Hintergrundfarbe jedes spinner-Elements ändern Allgemeine Java-Themen 1
Q Eclipse Escape Sequenzen Farbe ändern Allgemeine Java-Themen 4
OSchriever Einfach verkettete Liste ändern Allgemeine Java-Themen 43
D Boolean von ein anderem Java Programm während der Laufzeit ändern Allgemeine Java-Themen 23
D ArrayList Indexlänge ändern Allgemeine Java-Themen 2
E javax.mail sene Type ändern Allgemeine Java-Themen 2
J Farbe von Buttons mehrmals ändern Allgemeine Java-Themen 5
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
B ImageView Farbe ändern Allgemeine Java-Themen 3
J Eine bestimmte Zahl im Integer ändern Allgemeine Java-Themen 9
R Zeitformat ändern Allgemeine Java-Themen 18
olfibits Erste Schritte Konsolentitel ändern Allgemeine Java-Themen 3
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
S Kann man mit Java auf einem lokalen PC/Mac Benutzergruppen auslesen und Rechte ändern? Allgemeine Java-Themen 11
N Das Ende von bestimmten zeilen in text datei ändern und speichern Allgemeine Java-Themen 3
B Input/Output Datei ändern Allgemeine Java-Themen 9
T JasperReport Hintergrundfarbe wertabhängig ändern Allgemeine Java-Themen 3
sandaime CMD aufrufen und aktuellen pfad ändern Allgemeine Java-Themen 11
M Variable ändern bei jedem Schleifendurchlauf Allgemeine Java-Themen 32
RalleYTN DPI eines Bildes ändern Allgemeine Java-Themen 4
K eclipse Workspace ändern Allgemeine Java-Themen 2
J Properties file ändern Allgemeine Java-Themen 12
R WebDriver Firefox preferences ändern Allgemeine Java-Themen 0
W Input/Output Kann .properties Datei in kompilierter .jar nicht ändern Allgemeine Java-Themen 2
G Unix Passwort mit Java ändern? Allgemeine Java-Themen 3
M OOP Bildschirmauflösung des Systems ändern Allgemeine Java-Themen 0
Avarion Font von StyledDocument ändern Allgemeine Java-Themen 0
chuxXo System/JLayer Volume ändern Allgemeine Java-Themen 0
Thallius App-Sprache in der App ändern. Wo ist mein Denkfehler? Allgemeine Java-Themen 6
Tausendsassa Interface Buttons Background ändern! Wie?? Allgemeine Java-Themen 10
E Apache POI Powerpoint Verlinkungen ändern Allgemeine Java-Themen 4
R Int Wert im Dialogfeld ändern Allgemeine Java-Themen 4
Ananaskirsche Best Practice Sprachen ändern für Consolenausgaben Allgemeine Java-Themen 2
P Sprache ändern ins Programm einbinden Allgemeine Java-Themen 6
M String an einem abschnitt ändern Allgemeine Java-Themen 14
S Name einer Musikdatei auslesen und ändern Allgemeine Java-Themen 8
M Threads Bildformat mit java ändern Allgemeine Java-Themen 2
x22 Hintergrund in Netbeans ändern Allgemeine Java-Themen 3
M Zufälligen String generieren und alle 5 Minuten ändern Allgemeine Java-Themen 2
C Input/Output Bestimmte Zeile in Datei ändern. Allgemeine Java-Themen 13
B Swing Look And Feel ändern Allgemeine Java-Themen 15
jstei001 Reguläre Ausdrücke bearbeiten/ändern Allgemeine Java-Themen 14
H CLASSPATH im Javaprogramm ändern Allgemeine Java-Themen 5
S Datentypen Eine Variable von String zu Int ändern Allgemeine Java-Themen 5
B Input/Output Dateiendung ändern Allgemeine Java-Themen 6
P ganze Zeilen in einem File mit .replace() ändern. Allgemeine Java-Themen 10
Y Bildschirmauflösung ändern Allgemeine Java-Themen 5
P Wie bei log4j den Dateipfad der Logdatei zur Laufzeit ändern? Allgemeine Java-Themen 3
S Klassen .jar - eine .class datei ändern? Allgemeine Java-Themen 23
C Auf eine Methode von einer anderen Klasse aus ändern? Allgemeine Java-Themen 4
N .doc text ändern Allgemeine Java-Themen 12
X XML Dateien ändern Allgemeine Java-Themen 2
W LayoutManager Position der Componenten nachträglich ändern Allgemeine Java-Themen 12
A Ordnerberechtigungen ändern Allgemeine Java-Themen 10
Dit_ Registry, Preferences | Name des Knotens ändern. Allgemeine Java-Themen 2
R Windows - User Passwort ändern Allgemeine Java-Themen 2
S UML zur Laufzeit ändern Allgemeine Java-Themen 10
S equals - Identität ändern bei Vererbung? Allgemeine Java-Themen 5
S TreeSet - Comparator ändern -> resort? Allgemeine Java-Themen 8
E FF Einstellungen über Programm ändern? Allgemeine Java-Themen 7
M Grösse eines JTabbedPane ändern Allgemeine Java-Themen 2
L Kurzfristig Bildschirmauflösung ändern Allgemeine Java-Themen 2
Burny91 JAR-Datei Icon ändern Allgemeine Java-Themen 2
W Dateiinfo auslesen/ändern Allgemeine Java-Themen 3
S Tastaturbelegung global ändern Allgemeine Java-Themen 5
Q .jar wird mit cmd gestartet - Zuordnung von Dateitypen ändern (Windows 7) Allgemeine Java-Themen 7
H Erstelldatum einer Datei ändern. Allgemeine Java-Themen 3
T Wie kann man bei CheckBoxTrees die Checkboxzustände ändern? Allgemeine Java-Themen 2
K Ordnername ändern Allgemeine Java-Themen 2
Dissi Gammawerte des Grafiktreibers / System ändern? Allgemeine Java-Themen 3
E Objekt bei Serialisierung ändern Allgemeine Java-Themen 2
V Druckereigenschaften ändern? Allgemeine Java-Themen 17
G Jar File zur Laufzeit ändern. Allgemeine Java-Themen 4
C IP Adresse mit Java ändern? Allgemeine Java-Themen 9
A Ordnerrechte / Zugriffsrechte mit Java ändern? Allgemeine Java-Themen 10
M Dateinamen ändern Allgemeine Java-Themen 3
E *.class ändern/ersetzen/überschreiben. Allgemeine Java-Themen 9
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
G HashMap key ändern Allgemeine Java-Themen 5
K JFreeChart Achsenbeschriftung ändern? Allgemeine Java-Themen 4
Luma Arbeitsverzeichnis innerhalb externen Bibliothek ändern Allgemeine Java-Themen 2
T (Binary)Datei einlesen, Inhalt ändern, Datei schreiben Allgemeine Java-Themen 4
D Zugriffsmethode nach Vererbung ändern? Allgemeine Java-Themen 5
A log4j 1.3 und ändern der log Konfiguration zur Laufzeit Allgemeine Java-Themen 4
E java.lang.outofmemory über windows-cmd ändern Allgemeine Java-Themen 6
1 Systemzeit ändern Allgemeine Java-Themen 6
timomeinen Access Modifier vor Kompilierung ändern Allgemeine Java-Themen 9
G Hintergrundbild ändern?` Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben