Новые функции в java 7


Ответы:


212

Функции и улучшения Java SE 7 из JDK 7 Release Notes

Это сводка новых возможностей Java 7 со страницы возможностей OpenJDK 7 :

vm JSR 292: Поддержка языков с динамической типизацией (InvokeDynamic)
        Строгая проверка файла класса
lang JSR 334: небольшие языковые улучшения (Project Coin)
ядро Обновить архитектуру загрузчика классов
        Метод закрытия URLClassLoader
        Обновления параллелизма и коллекций (jsr166y)
i18n Unicode 6.0
        Улучшение локали
        Отдельные языковой стандарт пользователя и языковой стандарт пользовательского интерфейса
ionet JSR 203: больше новых API ввода-вывода для платформы Java (NIO.2)
        Поставщик файловой системы NIO.2 для архивов zip / jar
        SCTP (протокол передачи управления потоком)
        SDP (Прямой протокол сокетов)
        Используйте стек IPv6 Windows Vista
        TLS 1.2
sec Криптография на основе эллиптических кривых (ECC)
jdbc JDBC 4.1
клиентский конвейер XRender для Java 2D
        Создание новых API-интерфейсов платформы для графических функций 6u10
        Внешний вид Nimbus для Swing
        Компонент Swing JLayer
        Звуковой синтезатор Gervill [НОВИНКА]
web Обновить стек XML
mgmt Enhanced MBeans [ОБНОВЛЕНО]

Примеры кода для новых функций в Java 1.7

Заявление "Попробуйте с ресурсами"

этот:

BufferedReader br = new BufferedReader(new FileReader(path));
try {
   return br.readLine();
} finally {
   br.close();
}

становится:

try (BufferedReader br = new BufferedReader(new FileReader(path)) {
   return br.readLine();
}

Вы можете объявить закрытие нескольких ресурсов:

try (
   InputStream in = new FileInputStream(src);
   OutputStream out = new FileOutputStream(dest))
{
 // code
}

Подчеркивание в числовых литералах

int one_million = 1_000_000;

Струны в переключателе

String s = ...
switch(s) {
 case "quux":
    processQuux(s);
    // fall-through

  case "foo":
  case "bar":
    processFooOrBar(s);
    break;

  case "baz":
     processBaz(s);
    // fall-through

  default:
    processDefault(s);
    break;
}

Двоичные литералы

int binary = 0b1001_1001;

Улучшенный вывод типов для создания универсального экземпляра

Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

становится:

Map<String, List<String>> anagrams = new HashMap<>();

Множественный перехват исключений

этот:

} catch (FirstException ex) {
     logger.error(ex);
     throw ex;
} catch (SecondException ex) {
     logger.error(ex);
     throw ex;
}

становится:

} catch (FirstException | SecondException ex) {
     logger.error(ex);
    throw ex;
}

SafeVarargs

этот:

@SuppressWarnings({"unchecked", "varargs"})
public static void printAll(List<String>... lists){
    for(List<String> list : lists){
        System.out.println(list);
    }
}

становится:

@SafeVarargs
public static void printAll(List<String>... lists){
    for(List<String> list : lists){
        System.out.println(list);
    }
}

4
+1 Код для труднодоступных примеров кода. Вы можете добавить еще?
Zasz

3
Улучшенный вывод типов кажется грустной копией из C # со странным изменением, когда ссылка вводится, а объект - нет ?? Какая комедия!
Zasz

1
@Zasz, да, конечно, он постоянно совершенствуется
didxga

Итак, вопрос к OP, каково ваше мнение? Являются ли эти улучшения только производительностью или они действительно могут улучшить производительность программ? Если байт-код не меняется, можно ли использовать новые языковые улучшения с байт-кодом, помеченным как 1.5?
Дмитрий Р

Хотя это и не улучшение языка, есть новый Objectsкласс со статическими методами, чтобы избежать необходимости проверять нулевые ссылки. Пример: if (obj != null && obj.equals(anotherObj))становитсяif (Objects.equals(obj, anotherObj))
Carcamano 02

13

Новая функция Java Standard Edition (JSE 7)

  1. Украсьте компоненты классом JLayer:

    Класс JLayer - это гибкий и мощный декоратор для компонентов Swing. Класс JLayer в Java SE 7 по духу похож на проект проекта JxLayer на java.net. Класс JLayer изначально был основан на проекте JXLayer, но его API развивался отдельно.

  2. Строки в операторе switch :

    В JDK 7 мы можем использовать объект String в выражении оператора switch. Компилятор Java обычно генерирует более эффективный байт-код из операторов switch, которые используют объекты String, чем из связанных операторов if-then-else.

  3. Вывод типа для универсального экземпляра:

    Мы можем заменить аргументы типа, необходимые для вызова конструктора универсального класса, пустым набором параметров типа (<>), если компилятор может вывести аргументы типа из контекста. Эта пара угловых скобок неофициально называется ромбом. Java SE 7 поддерживает вывод ограниченного типа для создания универсального экземпляра; вы можете использовать вывод типа, только если параметризованный тип конструктора очевиден из контекста. Например, следующий пример не компилируется:

    List<String> l = new ArrayList<>();
    l.add("A");
    l.addAll(new ArrayList<>());
    

    Для сравнения компилируется следующий пример:

    List<? extends String> list2 = new ArrayList<>();
    l.addAll(list2);
    
  4. Перехват нескольких типов исключений и повторное отображение исключений с улучшенной проверкой типов:

    В Java SE 7 и более поздних версиях один блок catch может обрабатывать более одного типа исключений. Эта функция может уменьшить дублирование кода. Рассмотрим следующий код, который содержит повторяющийся код в каждом из блоков catch:

    catch (IOException e) {
        logger.log(e);
        throw e;
    }
    catch (SQLException e) {
        logger.log(e);
        throw e;
    }
    

    В версиях, предшествующих Java SE 7, сложно создать общий метод для устранения дублированного кода, поскольку переменная e имеет разные типы. В следующем примере, который действителен в Java SE 7 и новее, дублированный код устраняется:

    catch (IOException|SQLException e) {
        logger.log(e);
        throw e;
    }
    

    Предложение catch определяет типы исключений, которые может обрабатывать блок, и каждый тип исключения отделяется вертикальной чертой (|).

  5. Пакет java.nio.file

    Этот java.nio.fileпакет и связанный с ним пакет java.nio.file.attribute обеспечивают всестороннюю поддержку файлового ввода-вывода и доступа к файловой системе. Поставщик файловой системы zip также доступен в JDK 7.

Источник: http://ohmjavaclasses.blogspot.com/


6

3

В дополнение к тому, что сказал Джон Скит, вот обзор проекта Java 7 . Он включает в себя список и описание функций.

Примечание. JDK 7 был выпущен 28 июля 2011 г., поэтому теперь вам следует перейти на официальный сайт java SE .


К вашему сведению, это хорошая презентация, но довольно старая и несколько устаревшая.
Alex Miller

Когда я попробовал эту ссылку, у меня появилась страница с ошибкой на иврите - есть ли где-нибудь более свежая копия?
Саймон Никерсон

1

Изменения языка :

-Project Coin (small changes)
-switch on Strings
-try-with-resources
-diamond operator

Изменения библиотеки :

-new abstracted file-system API (NIO.2) (with support for virtual filesystems)
-improved concurrency libraries
-elliptic curve encryption
-more incremental upgrades

Изменения платформы :

-support for dynamic languages

Ниже приведена ссылка, объясняющая недавно добавленные функции JAVA 7, объяснение кристально ясное с возможными небольшими примерами для каждой функции:

http://radar.oreilly.com/2011/09/java7-features.html


0

Использование оператора Diamond (<>) для создания универсального экземпляра

Map<String, List<Trade>> trades = new TreeMap <> ();

Использование строк в операторах switch

String status=  “something”;
   switch(statue){
     case1: 
     case2: 
     default:
    }

Подчеркивание в числовых литералах

int val 12_15; длинный phoneNo = 01917_999_720L;

Использование одного оператора catch для генерации нескольких исключений с помощью символа «|» оператор

catch(IOException | NullPointerException ex){
          ex.printStackTrace();   
    }

Нет необходимости close () resources, потому что Java 7 предоставляет оператор try-with-resources

try(FileOutputStream fos = new FileOutputStream("movies.txt");
      DataOutputStream dos = new DataOutputStream(fos)) {
              dos.writeUTF("Java 7 Block Buster");
  } catch(IOException e) {
        // log the exception
  }

двоичные литералы с префиксом «0b» или «0B»


0

Я думаю, что ForkJoinPool и связанное с ним усовершенствование Executor Framework являются важным дополнением в Java 7.


-2

В следующем списке содержатся ссылки на страницы расширений в Java SE 7.

Swing
IO and New IO
Networking
Security
Concurrency Utilities
Rich Internet Applications (RIA)/Deployment
    Requesting and Customizing Applet Decoration in Dragg able Applets
    Embedding JNLP File in Applet Tag
    Deploying without Codebase
    Handling Applet Initialization Status with Event Handlers
Java 2D
Java XML – JAXP, JAXB, and JAX-WS
Internationalization
java.lang Package
    Multithreaded Custom Class Loaders in Java SE 7
Java Programming Language
    Binary Literals
    Strings in switch Statements
    The try-with-resources Statement
    Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking
    Underscores in Numeric Literals
    Type Inference for Generic Instance Creation
    Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods
Java Virtual Machine (JVM)
    Java Virtual Machine Support for Non-Java Languages
    Garbage-First Collector
    Java HotSpot Virtual Machine Performance Enhancements
JDBC

Ссылка 1 Ссылка 2


1
Вы должны дать более короткие описания или примеры вместо того списка, который мы также можем узнать на официальной странице Java.
Кен Блок
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.