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

Какие новые функции в Java 7 будут реализованы? А что они сейчас делают?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
94
1
116 325
8

Ответы 8

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

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

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

Alex Miller 21.10.2008 01:23

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

Simon Nickerson 02.04.2009 20:22

Java SE 7 Особенности и улучшения из примечания к выпуску JDK 7

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

vm  JSR 292: Support for dynamically-typed languages (InvokeDynamic)
        Strict class-file checking
lang    JSR 334: Small language enhancements (Project Coin)
core    Upgrade class-loader architecture
        Method to close a URLClassLoader
        Concurrency and collections updates (jsr166y)
i18n    Unicode 6.0
        Locale enhancement
        Separate user locale and user-interface locale
ionet   JSR 203: More new I/O APIs for the Java platform (NIO.2)
        NIO.2 filesystem provider for zip/jar archives
        SCTP (Stream Control Transmission Protocol)
        SDP (Sockets Direct Protocol)
        Use the Windows Vista IPv6 stack
        TLS 1.2
sec     Elliptic-curve cryptography (ECC)
jdbc    JDBC 4.1
client  XRender pipeline for Java 2D
        Create new platform APIs for 6u10 graphics features
        Nimbus look-and-feel for Swing
        Swing JLayer component
        Gervill sound synthesizer [NEW]
web     Update the XML stack
mgmt    Enhanced MBeans [UPDATED]

Примеры кода для новых функций в 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);
    }
}

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

Zasz 09.08.2011 21:01

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

Zasz 09.08.2011 21:04

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

didxga 10.08.2011 07:36

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

Dmitriy R 12.08.2011 00:03

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

Carcamano 02.03.2016 21:58

действительно оценил усилия, +1

Nelssen 25.11.2019 19:56

В следующем списке содержатся ссылки на страницы расширений в 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

Вы должны дать более короткие описания или примеры вместо того списка, который мы также можем найти на официальной странице Java.

Ken Block 25.08.2015 13:27

Новая функция 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/

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

-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

Using Diamond(<>) operator for generic instance creation

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

Using strings in switch statements

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

Underscore in numeric literals

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

Using single catch statement for throwing multiple exception by using “|” operator

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

No need to close() resources because Java 7 provides try-with-resources statement

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

binary literals with prefix “0b” or “0B”

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

Другие вопросы по теме