Java Language
Возможности Java SE 7
Поиск…
Вступление
замечания
Новые возможности языка программирования Java SE 7
- Бинарные литералы : интегральные типы (байт, короткий, int и long) также могут быть выражены с использованием системы двоичных чисел. Чтобы указать бинарный литерал, добавьте префикс 0b или 0B в число.
- Строки в операторах switch : вы можете использовать объект String в выражении оператора switch
- Заявление try-with-resources: оператор try-with-resources представляет собой оператор try, который объявляет один или несколько ресурсов. Ресурс - это объект, который должен быть закрыт после завершения программы. Оператор try-with-resources гарантирует, что каждый ресурс будет закрыт в конце инструкции. В качестве ресурса может использоваться любой объект, реализующий java.lang.AutoCloseable, который включает в себя все объекты, которые реализуют java.io.Closeable.
- Улавливание множественных типов исключений и исключение исключений с улучшенным контролем типов : один блок catch может обрабатывать более одного типа исключения. Эта функция может уменьшить дублирование кода и уменьшить соблазн, чтобы поймать чрезмерно широкое исключение.
- Подчеркивания в числовых литералах : любое число символов подчеркивания (_) может отображаться где угодно между цифрами в числовом литерале. Эта функция позволяет вам, например, разделять группы цифр в числовых литералах, что может улучшить читаемость вашего кода.
- Вывод типа для создания Generic Instance : вы можете заменить аргументы типа, необходимые для вызова конструктора родового класса с пустым набором параметров типа (<>), если компилятор может вывести аргументы типа из контекста. Эта пара угловых скобок неофициально называется алмазом.
- Улучшенные предупреждения и ошибки компилятора при использовании невосстанавливаемых формальных параметров с помощью методов Varargs
Бинарные литералы
// 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;
Оператор try-with-resources
В примере читается первая строка из файла. Он использует экземпляр BufferedReader
для чтения данных из файла. BufferedReader
- это ресурс, который должен быть закрыт после завершения программы:
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
В этом примере ресурс, объявленный в инструкции try-with-resources, представляет собой BufferedReader
. Оператор объявления появляется в круглых скобках сразу после ключевого слова try. Класс BufferedReader
, в Java SE 7 и более поздних версиях, реализует интерфейс java.lang.AutoCloseable
. Поскольку экземпляр BufferedReader
объявлен в инструкции try-with-resource, он будет закрыт независимо от того, завершает ли оператор try нормально или внезапно (в результате метода BufferedReader.readLine
генерирует IOException
).
Подчеркивает числовые литералы
В следующем примере показаны другие способы использования подчеркивания в числовых литералах:
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;
Вы можете разместить символы подчеркивания только между цифрами; вы не можете размещать символы подчеркивания в следующих местах:
- В начале или конце номера
- Рядом с десятичной точкой в литерале с плавающей запятой
- До суффикса F или L
- В позициях, где ожидается строка цифр
Тип вывода для создания общего экземпляра
Ты можешь использовать
Map<String, List<String>> myMap = new HashMap<>();
вместо
Map<String, List<String>> myMap = new HashMap<String, List<String>>();
Однако вы не можете использовать
List<String> list = new ArrayList<>();
list.add("A");
// The following statement should fail since addAll expects
// Collection<? extends String>
list.addAll(new ArrayList<>());
потому что он не может скомпилировать. Обратите внимание, что бриллиант часто работает в методах; однако предлагается использовать алмаз в основном для объявлений переменных.
Строки в операторах
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;
}