Нові функції в Java 7


Відповіді:


211

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

Це підсумок нових функцій 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 (Sockets Direct Protocol)
        Використовуйте стек IPv6 для Windows Vista
        TLS 1.2
сек Криптографія з еліптичною кривою (ECC)
jdbc JDBC 4.1
клієнтський конвеєр XRender для Java 2D
        Створіть нові API платформи для графічних функцій 6u10
        Німб поглядом на Свінг
        Гойдалка JLayer компонент
        Синтезатор звуку Gervill [НОВЕ]
Інтернет Оновіть стек XML
mgmt Розширені 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

Тож питання в ОП, яка ваша думка? Ці покращення стосуються лише продуктивності, чи вони дійсно можуть покращити продуктивність програм? Якщо байт-код не змінюється, чи можна використовувати нові вдосконалення мови з байт-кодом, позначеним як 1.5?
Дмитро Р

Хоча це не вдосконалення мови, є новий Objectsклас зі статичними методами, щоб уникнути необхідності перевіряти наявність нульових референсів. Приклад: if (obj != null && obj.equals(anotherObj))стаєif (Objects.equals(obj, anotherObj))
Carcamano 02.03.16

13

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

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

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

  2. Рядки в операторі комутатора :

    У JDK 7 ми можемо використовувати об'єкт String у виразі оператора switch. Компілятор Java генерує, як правило, більш ефективний байт-код з операторів перемикання, які використовують об'єкти 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 .


До уваги, це гарна презентація, але досить стара і дещо застаріла.
Алекс Міллер,

Коли я спробував це посилання, я отримав сторінку помилки на івриті - чи є де-небудь оновлена ​​копія?
Саймон Нікерсон,

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 <> ();

Використання рядків у операторах перемикання

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

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

int val 12_15; довгий телефонNo = 01917_999_720L;

Використання одного оператора catch для створення кількох винятків за допомогою "|" оператора

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

Не потрібно закривати () ресурси, оскільки 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.
Ken Block
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.