Jaxenter:
Was im September 2016 im JEP 295 vorgeschlagen wurde, ist nun offiziell dem Java-9-Release zugewiesen: Ahead-of-Time-Kompilierung wird Einzug in die Java-VM halten.
Was im September 2016 im JEP 295 vorgeschlagen wurde, ist nun offiziell dem Java-9-Release zugewiesen: Ahead-of-Time-Kompilierung wird Einzug in die Java-VM halten.
Wo werden eigentlich Klassenvariablen initialisiert? Im Konstruktor ergibt dies keinen Sinn, da für Klassenvariablen keine Objekte angelegt werden müssen. Dafür gibt es den static{}-Block. Dieser wird immer dann ausgeführt, wenn der Klassenlader eine Klasse in die Laufzeitumgebung geladen hat. Für eine statische Initialisierung wird also wieder der Compiler etwas einfügen:
Was wir schreiben | Was der Compiler generiert |
class Beer { static String isFreeFor = „Homer“; } |
class Beer { static String isFreeFor; static { isFreeFor = „Homer“; } } |
Klassenintialisierer sind nicht ganz ungefährlich, denn wenn der Code eine Ausnahme auslöst, dann gibt es einen harten lang.ExceptionInInitializerError. Leser können das testen, in dem geändert wird:
static String isFreeFor = „Homer“.substring( -1 );
und dann aus dem Hauptprogramm aufrufen:
out.println( Beer.isFreeFor );
Ein Konstruktor soll die Anzahl der erzeugten Objekte mitzählt; eine statische Methode liefert später die bis dahin gebauten Exemplare:
public class Rollercoaster { private static int numberOfInstances; { numberOfInstances++; } public static int getNumberOfInstances() { return numberOfInstances; } public static void main( String[] args ) { new Rollercoaster(); new Rollercoaster(); System.out.println( Rollercoaster.getNumberOfInstances() ); // 2 } }
Die statische Variable numberOfInstances wird bei jedem neuen Exemplar über den Konstruktor hochgesetzt. Direkt ausgeschrieben ist der Konstruktor nicht, sondern es findet ein Exemplarinitialisierer Anwendung, da der Compiler den Code automatisch in jeden Konstruktor kopiert. Das hat den Vorteil, dass Entwickler später problemlos neue Konstuktoren für den Rollercoaster hinzufügen können, ohne das Inkrement der statischen Variable immer im Hinterkopf behalten zu müssen.
Hinweis: Bei nebenläufigen Zugriffen auf statische Variablen kann es zu Problemen kommen. Deshalb müssen wir spezielle Synchronisationsmechanismen nutzen – die das Beispiel allerdings nicht verwendet. Statische Variablen können auch schnell zu Speicherproblemen führen, da Objektreferenzen sehr lange gehalten werden. Der Einsatz muss wohldurchdacht sein.
Alle Neuigkeiten unter https://www.eclipse.org/eclipse/news/4.7/M2/.
Für mich als Java-Programmierer ist eignetlich nur das interessant:
Method result after step operations | During debugging, the last method result (per return or throw) that was observed duringStep Into, Step Over or Step Return, is shown as first line in the Variables view.
This can be disabled with the new option Preferences > Java > Debug > Show method result after a step operation (if supported by the VM; may be slow) |
Details zu den Änderungen unter http://www.gwtproject.org/release-notes.html. Toll ist die Unterstützung von Java 8.
java.io.UncheckedIOException
.Optional<T>
and its int, long, double variants.Objects.requireNonNull()
with message Supplier.Character.isBmpCodePoint()
.CharSequence.chars()
.java.lang.SecurityException
.java.util.Arrays
,java.util.ArrayDeque
,java.math.BigInteger
,java.util.BitSet
,java.util.Comparator
,java.util.function
,java.util.Iterator
,java.lang.Iterable
,java.util.IntSummaryStatistics/LongSummaryStatistics/DoubleSummaryStatistics
java.util.Collection/Lists/Queues
,java.util.Map
,java.util.logging.Logger
,java.util.PrimitiveIterator
,java.util.Spliterator
,java.util.stream
,java.util.StringJoiner
So gesagt in http://mail.openjdk.java.net/pipermail/jdk9-dev/2016-October/005092.html:
2016/05/26 Feature Complete 2016/12/22 Feature Extension Complete 2017/01/05 Rampdown Start 2017/02/09 All Tests Run 2017/02/16 Zero Bug Bounce 2017/03/16 Rampdown Phase 2 2017/07/06 Final Release Candidate 2017/07/27 General Availability
Naja, schauen wir mal.
Das JSP/Servlet-Seminar vermittelt den Aufbau dynamische Webseiten mit der JSP und Servlet Technologie. JavaServer Pages (JSP) übernehmen bei der Trennung von Visualisierung und Applikationscode die Darstellung, JavaBeans die Daten und Logik. Das Protokoll …
In Dortmund 23.11.-25.11.2016
Java 8 bringt große Änderungen an der Sprache mit sich, die die Programmierung deutlich beeinflusst. Die größte Sprachänderungen von Java 8 betreffen Lambda-Ausdrücke, dazu gesellen sich Default-Methoden und statische Schnittstellenmethoden. Teilnehmer …
In Dortmund als Eintagesschulung am 21.11.2016
Durch ihre Plattformunabhängigkeit sind Java-Programme auf unterschiedlichen Computersystemen ablauffähig. Ihre hohe Performanz und Robustheit macht Java zu einer beliebten Sprache für kritische Serverkomponenten. In diesem Seminar lernen die Teilnehmer …
In Dortmund KW 46 14.11.-18.11.2016 und wieder in 2017
Der Kurs richtet sich an Teilnehmer, die bereits Erfahrung in der objektorientierten Programmiersprache C++ haben und jetzt die Eigenschaften von Java kennen lernen wollen. Mit den leistungsfähigen Bibliotheken lernen die Teilnehmer nebenläufige Programme …
In Dortmund vom 07.11.-11.11.2016 (KW 45) zusammen mit dem Seminar Java für C#-Programmierer
Der Kurs richtet sich an Teilnehmer, die bereits Erfahrung in der objektorientierten Programmiersprache C# und dem .NET-Framework haben und jetzt die Eigenschaften von Java kennen lernen wollen. Mit den leistungsfähigen Java-Bibliotheken lernen die Teilnehmer …
In Dortmund vom 07.11.-11.11.2016 (KW 45) zusammen mit dem Seminar Java für C++-Programmierer
So sagt es Mark Reinhold http://mail.openjdk.java.net/pipermail/jdk9-dev/2016-September/004887.html.
So ist jedenfalls der Plan, weitere Infos unter https://wiki.apache.org/incubator/NetBeansProposal.
Auf Vimeo: https://vimeo.com/album/4133413/
Alles nur heiße Luft?
Nach den in letzten Wochen immer deutlich werdenden Spekulationen zur Zukunft von Java EE hat sich Oracle nun zu seinen Plänen geäußert:
Oracles Pläne sehen für Java EE deutlich „mehr Cloud“ vor.
Damit beschäftigt sich https://applidium.com/en/news/unbundling_pokemon_go/.
Oracle hat heute das Update 101 der Java 8 SE-Bibliothek veröffentlicht und behebt damit diverse Fehler und Sicherheitslücken.
Auch die Stabilität und Performance soll verbessert worden sein.
Hat ein System beschränkten Speicher, wird es knapp für das gesamte Java SE. Daher gibt es Teilmengen der Java SE, genannt Profiles, die nur knapp über 11 MiB benötigen. Im Moment gibt es drei Profile, also drei Teilmengen der Java SE, die jeweils immer etwas mehr können. compact1 ist die kleinste Teilmenge, wo zum Beispiel die Kernklassen enthalten sind, compact2 nimmt die API für Datenbankverbindungen mit auf, compact3 kann dann XML-Verarbeitung und die komplette Java SE grafische Oberflächen darstellen oder Web-Services deklarieren.
Jede Klasse ist einem Profil zugeordnet, was der Compiler statisch prüfen kann – solange der Klassenname nicht dynamisch bestimmt wird. So lässt sich sicherstellen, dass nur Typen referenziert werden, die auch in einem Profil sind.
Oracle unterstützt mit der Oracle Java Standard Edition Embedded (Oracle Java SE Embedded)[1] Profile. Allerdings laden Entwickler keine einfache Laufzeiumgebung herunter, sondern ein Werkzeug JRECreate, mit dem eine Laufzeitumgebung mit unseren eigenen Paketen für ein bestimmtes System generiert wird. Drei Laufzeitumgebungen sind wählbar: eine Minimal-JVM, Client JVM (schnelle Reaktionsfähigkeit), Server JVM (verbraucht mehr Hauptspeicher). Sehr fein kann dann bestimmt werden, ob JavaFX mit dabei sein soll, oder welche Sprachübersetzungen mit ausgeliefert werden. Am Ende steht ein Verzeichnis mit bin und JRE, lib und Java-Archiven, Konfigurationen und – das darf bei Oracle auf keinen Fall fehlen – Copyright- und Lizenz-Dokumenten.
[1] http://www.oracle.com/technetwork/java/embedded/embedded-se/downloads/index.html
Alle News unter https://www.eclipse.org/eclipse/news/4.6/platform.php.
Interessant sind:
Commands and shortcuts to zoom in text editors | In text editors, you can now use Zoom In (Ctrl++ or Ctrl+=) and Zoom Out (Ctrl+-) commands to increase and decrease the font size.Like a change in the General > Appearance > Colors and Fonts preference page, the commands persistently change the font size in all editors of the same type. If the editor type’s font is configured to use a default font, then that default font will be zoomed. |
Full Screen | The Full Screen feature is now also available on Windows and Linux. You can toggle the mode via shortcut (Alt+F11) or menu (Window > Appearance > Toggle Full Screen).When Full Screen is activated, you’ll see a dialog which tells you how to turn it off again.
On the Mac, Window > Toggle Full Screen (Control+Command+F) still works as before. |
Substring code completion | Content Assist now supports substring patterns. Enter any part of the desired proposal’s text, and Content Assist will find it! For example, completing on selection proposes all results containing selection as a substring.
This feature can be disabled using the Show substring matches option on the Java > Editor > Content Assist preference page. |
Clean Up to remove redundant type arguments | A new option to remove redundant type arguments has been added under the „Unnecessary Code“ group of the Clean Up profile. |
Create new fields from method parameters | You can now assign all parameters of a method or constructor to new fields at once using a newQuick Assist (Ctrl+1): |
Quick Fix to configure problem severity | You can now configure the severity of a compiler problem by invoking the new Quick Fix (Ctrl+1) which opens the Java > Compiler > Errors/Warnings preference page and highlights the configurable problem.
The Quick Fix icon may look familiar to you. In older Eclipse versions, this was a toolbar button in enriched hovers (i.e., you had to press F2 or move the mouse into the hover to see it). |
Der primitive Typ boolean lässt sich nicht über eine Typumwandlung in einen anderen primitiven Typ konvertieren. Doch in der Praxis kommt es vor, dass true auf 1 und false auf 0 abgebildet werden muss; der übliche Weg ist:
int val = aBoolean ? 1 : 0;
Exotischer ist:
int val = Boolean.compare( aBoolean, false );
Noch exotischer folgendes:
int val = 1 & Boolean.hashCode( true ) >> 1;
Für alle JavaFX-Freunde: Siehe http://gluonhq.com/open-source/scene-builder/ und http://gluonhq.com/scene-builder-8-2-0-now/.
Siehe http://openjdk.java.net/jeps/289 und Nachricht von Mark Reinhold.