Java Language
Java SE 7-Funktionen
Suche…
Einführung
Bemerkungen
Neue Funktionen der Programmiersprache Java SE 7
- Binäre Literale : Die Integraltypen (Byte, Kurz, Int und Lang) können auch mit dem Binärzahlensystem ausgedrückt werden. Um ein binäres Literal anzugeben, fügen Sie der Zahl das Präfix 0b oder 0B hinzu.
- Zeichenfolgen in switch-Anweisungen : Sie können ein String-Objekt im Ausdruck einer switch-Anweisung verwenden
- Die try-with-resources-Anweisung : Die try-with-resources-Anweisung ist eine try-Anweisung, die eine oder mehrere Ressourcen deklariert. Eine Ressource ist ein Objekt, das geschlossen werden muss, nachdem das Programm damit fertig ist. Die try-with-resources-Anweisung stellt sicher, dass jede Ressource am Ende der Anweisung geschlossen wird. Jedes Objekt, das java.lang.AutoCloseable implementiert, das alle Objekte enthält, die java.io.Closeable implementieren, kann als Ressource verwendet werden.
- Mehrere Ausnahmetypen abfangen und Ausnahmen mit verbesserter Typprüfung erneut auslösen : Ein einzelner Fangblock kann mehrere Ausnahmetypen behandeln. Diese Funktion kann die Duplizierung von Code reduzieren und die Versuchung verringern, eine übermäßig breite Ausnahme abzufangen.
- Unterstriche in numerischen Literalen : In einem numerischen Literal können beliebig viele Unterstriche (_) an einer beliebigen Stelle zwischen den Ziffern stehen. Mit dieser Funktion können Sie z. B. Zifferngruppen in numerischen Literalen voneinander trennen, wodurch die Lesbarkeit Ihres Codes verbessert wird.
- Typinferenz für die Erstellung generischer Instanzen : Sie können die zum Aufrufen des Konstruktors einer generischen Klasse erforderlichen Typargumente durch einen leeren Satz von Typparametern (<>) ersetzen, sofern der Compiler die Typargumente aus dem Kontext ableiten kann. Dieses Winkelpaar wird informell als Diamant bezeichnet.
- Verbesserte Compiler-Warnungen und -Fehler bei der Verwendung nichtformbarer Parameter mit Varargs-Methoden
Binäre Literale
// An 8-bit 'byte' value:
byte aByte = (byte)0b00100001;
// A 16-bit 'short' value:
short aShort = (short)0b1010000101000101;
// Some 32-bit 'int' values:
int anInt1 = 0b10100001010001011010000101000101;
int anInt2 = 0b101;
int anInt3 = 0B101; // The B can be upper or lower case.
// A 64-bit 'long' value. Note the "L" suffix:
long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;
Die try-with-resources-Anweisung
Das Beispiel liest die erste Zeile aus einer Datei. Es verwendet eine Instanz von BufferedReader
, um Daten aus der Datei zu lesen. BufferedReader
ist eine Ressource, die geschlossen werden muss, nachdem das Programm damit beendet wurde:
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
In diesem Beispiel ist die in der try-with-resources-Anweisung deklarierte Ressource ein BufferedReader
. Die Deklarationsanweisung wird unmittelbar nach dem Schlüsselwort try in Klammern angezeigt. Die Klasse BufferedReader
in Java SE 7 und höher implementiert die Schnittstelle java.lang.AutoCloseable
. Da die BufferedReader
Instanz in einer try-with-resource-Anweisung deklariert ist, wird sie unabhängig davon geschlossen, ob die try-Anweisung normal oder abrupt abgeschlossen wird (als Ergebnis der Methode BufferedReader.readLine
, die eine IOException
).
Unterstriche in numerischen Literalen
Das folgende Beispiel zeigt andere Möglichkeiten, wie Sie den Unterstrich in numerischen Literalen verwenden können:
long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi = 3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;
Sie können Unterstriche nur zwischen Ziffern setzen. Unterstriche können an folgenden Stellen nicht gesetzt werden:
- Am Anfang oder Ende einer Nummer
- Angrenzend an einen Dezimalpunkt in einem Fließkomma-Literal
- Vor einem Suffix von F oder L
- An Stellen, an denen eine Ziffernfolge erwartet wird
Typinferenz für die Generierung einer generischen Instanz
Sie können verwenden
Map<String, List<String>> myMap = new HashMap<>();
anstatt
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
Sie können jedoch nicht verwenden
List<String> list = new ArrayList<>();
list.add("A");
// The following statement should fail since addAll expects
// Collection<? extends String>
list.addAll(new ArrayList<>());
weil es nicht kompilieren kann. Beachten Sie, dass der Diamant häufig in Methodenaufrufen funktioniert. Es wird jedoch empfohlen, den Diamanten hauptsächlich für Variablendeklarationen zu verwenden.
Zeichenfolgen in switch-Anweisungen
public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
String typeOfDay;
switch (dayOfWeekArg) {
case "Monday":
typeOfDay = "Start of work week";
break;
case "Tuesday":
case "Wednesday":
case "Thursday":
typeOfDay = "Midweek";
break;
case "Friday":
typeOfDay = "End of work week";
break;
case "Saturday":
case "Sunday":
typeOfDay = "Weekend";
break;
default:
throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
}
return typeOfDay;
}