Java Language
Funkcje Java SE 7
Szukaj…
Wprowadzenie
Uwagi
Nowe funkcje języka programowania Java SE 7
- Literały binarne : Typy całkowite (bajty, krótkie, całkowite i długie) można również wyrazić za pomocą systemu liczb binarnych. Aby podać literał binarny, dodaj przedrostek 0b lub 0B do liczby.
- Ciągi w instrukcjach switch : Możesz użyć obiektu String w wyrażeniu instrukcji switch
- Instrukcja try-with-resources : Instrukcja try-with-resources to instrukcja try, która deklaruje jeden lub więcej zasobów. Zasób jest obiektem, który musi zostać zamknięty po zakończeniu programu. Instrukcja try-with-resources zapewnia, że każdy zasób jest zamykany na końcu instrukcji. Każdy obiekt, który implementuje java.lang.AutoCloseable, który obejmuje wszystkie obiekty, które implementują java.io.Closeable, może być używany jako zasób.
- Łapanie wielu typów wyjątków i ponowne przeglądanie wyjątków za pomocą ulepszonego sprawdzania typów : pojedynczy blok catch może obsłużyć więcej niż jeden typ wyjątku. Ta funkcja może zmniejszyć powielanie kodu i zmniejszyć pokusę złapania zbyt szerokiego wyjątku.
- Podkreślenia literałów numerycznych : Dowolna liczba znaków podkreślenia (_) może pojawić się w dowolnym miejscu między cyframi literału numerycznego. Ta funkcja umożliwia na przykład oddzielanie grup cyfr w literałach liczbowych, co może poprawić czytelność kodu.
- Wnioskowanie typu w przypadku tworzenia wystąpienia ogólnego : Można zastąpić argumenty typu wymagane do wywołania konstruktora klasy ogólnej pustym zestawem parametrów typu (<>), o ile kompilator może wywnioskować argumenty typu z kontekstu. Ta para kątowników jest nieformalnie nazywana diamentem.
- Ulepszone ostrzeżenia i błędy kompilatora podczas używania parametrów formalnych niepodlegających zwrotowi z metodami Varargs
Literały binarne
// 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;
Instrukcja try-with-resources
Przykład czyta pierwszą linię z pliku. Wykorzystuje instancję BufferedReader
do odczytu danych z pliku. BufferedReader
to zasób, który należy zamknąć po zakończeniu programu:
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
W tym przykładzie zasób zadeklarowany w instrukcji try-with-resources jest BufferedReader
. Deklaracja pojawia się w nawiasach bezpośrednio po słowie kluczowym try. Klasa BufferedReader
w Javie SE 7 i nowszych implementuje interfejs java.lang.AutoCloseable
. Ponieważ instancja BufferedReader
jest zadeklarowana w instrukcji try-with-resource, zostanie zamknięta niezależnie od tego, czy instrukcja try zakończy się normalnie czy nagle (w wyniku wywołania IOException
przez metodę BufferedReader.readLine
).
Podkreślenia w literałach numerycznych
Poniższy przykład pokazuje inne sposoby użycia podkreślenia w literałach numerycznych:
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;
Podkreślenia można umieszczać tylko między cyframi; nie możesz umieszczać podkreślenia w następujących miejscach:
- Na początku lub na końcu liczby
- Przylegający do kropki dziesiętnej w literale zmiennoprzecinkowym
- Przed sufiksem F lub L.
- W pozycjach, w których oczekiwany jest ciąg cyfr
Typ wnioskowania dla tworzenia instancji ogólnych
Możesz użyć
Map<String, List<String>> myMap = new HashMap<>();
zamiast
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
Nie możesz jednak użyć
List<String> list = new ArrayList<>();
list.add("A");
// The following statement should fail since addAll expects
// Collection<? extends String>
list.addAll(new ArrayList<>());
ponieważ nie można go skompilować. Zauważ, że diament często działa w wywołaniach metod; jednak sugeruje się, aby używać diamentu głównie do deklaracji zmiennych.
Ciągi w instrukcjach przełączników
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;
}