История версий Java. Diamond оператор для анонимных классов

Электроника 23.04.2019

Ожидается, что новая версия Java 9 выйдет уже 27 июля 2017 года. Давайте разберёмся, какие функции появятся, и расскажем, зачем они нужны.

Вот список важных нововведений Java 9:

С помощью примеров расскажем подробнее об этих функциях.

JShell

REPL (англ. read-eval-print loop) - система для интерактивного программирования в консоли. То есть если пользователь вводит строку кода, в консоли появляется результат её выполнения и этот процесс повторяется.

Oracle представила новый инструмент под названием «JShell». Он используется для тестирования и использования в консоли разных конструкций, например классов, интерфейсов, перечислений, объектов, операторов и т.д.

Кстати, уже сейчас можно загрузить бета-версию JDK 9, скачав её с официального сайта .

Простейший пример работы с JShell:

G:\>jshell | Welcome to JShell -- Version 9-ea | For an introduction type: /help intro jshell> int a = 10 a ==> 10 jshell> System.out.println("a value = " + a) a value = 10

Неизменяемые объекты List, Set и Map «из коробки»

Oracle представила несколько удобных методов для создания неизменяемых List, Set, Map и Map.Entry объектов без использования дополнительных классов

В Java SE 8 и более ранних версиях мы можем использовать Collections.unmodifiableXXX для создания неизменяемых объектов коллекций. К примеру, если мы хотим создать Immutable List , мы будем использовать Collections.unmodifiableList метод.

List и Set интерфейсы имеют of() методы. Примеры их использования можно увидеть ниже:

List immutableList = List.of(); // пустой неизменяемый список List immutableList = List.of("one","two","three"); // неизменяемый список, содержащий информацию

Map имеет два набора методов: of() методы и ofEntries() методы для создания объектов Immutable Map и Map.Entry.

Jshell> Map emptyImmutableMap = Map.of() emptyImmutableMap ==> {} // пустое неизменяемое отображение jshell> Map nonemptyImmutableMap = Map.of(1, "one", 2, "two", 3, "three") nonemptyImmutableMap ==> {2=two, 3=three, 1=one} // неизменяемое отображение

Private методы в интерфейсах

В Java 8 мы можем обеспечивать реализацию метода в интерфейсах, используя default и static методы. Однако мы не можем создавать private методы в интерфейсах.
Для избавления от нагромождения и переизбытка кода Oracle собирается добавить private методы в интерфейсы Java SE 9. Начиная с девятой версии, мы также сможем создавать private static методы в интерфейсах с помощью private.

Создание реализации метода для интерфейса по умолчанию:

Public interface Card { private Long createCardID() { // Реализация метода происходит здесь. } private static void displayCardDetails() { // Реализация метода происходит здесь. } }

Модульная система

Одним из самых значительных изменений является появление модульной системы. До Java 9 мы использовали JAR-файлы для разработки приложений, базирующихся на Java. Однако, эта архитектура имеет несколько ограничений и недостатков. Для их устранения и внедрили модульную систему . Это нововведение является частью проекта Jigsaw , который разрабатывается для того, чтобы программисты могли разбивать программы на независимые и межпрограммные модули.

Вот некоторые из функций этой системы:

  • модульная JDK;
  • модульный исходный код Java;
  • модульные run-time изображения;
  • инкапсуляция внутренних API;
  • система модульной платформы;

JDK 9 поставляется с 92 модулями. Мы можем использовать их или создать свои, например:

Module com.foo.bar { }

Каждый модуль имеет имя, связанный код и другие ресурсы.

Улучшение API

Ожидается, что в Java SE 9 будут произведены улучшения по части API. Будут добавлены несколько новых классов и методов для более удобного управления действиями операционной системы.
Два новых интерфейса в Process API:

  • java.lang.ProcessHandle;
  • java.lang.ProcessHandle.Info.

Пример Process API:

ProcessHandle currentProcess = ProcessHandle.current(); System.out.println("Current Process Id: = " + currentProcess.getPid());

Здесь нами был создан объект типа ProcessHandle для работы с действиями операционной системе.

Изменения в try-with-resources

Как мы знаем, в Java SE 7 появилась новая конструкция обработки исключений Try-With-Resources для автоматического управления ресурсами. В Java SE 9 собираются внести несколько изменений в эту конструкцию, чтобы повысить читаемость.
Пример в Java SE 7:

Void testARM_Before_Java9() throws IOException { BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt")); try (BufferedReader reader2 = reader1) { System.out.println(reader2.readLine()); } }

Пример в Java 9:

Void testARM_Java9() throws IOException { BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt")); try (reader1) { System.out.println(reader1.readLine()); } }

Можно заметить, что в новой версии, после try не обязательно объявлять новую переменную.

Новшества в CompletableFuture API

В Java 9 Oracle также собирается улучшить CompletableFuture API для решения проблем, появившихся в Java SE 8. В планах добавить задержки и тайм-ауты, дополнительные методы и улучшить подклассы.

Executor exe = CompletableFuture.delayedExecutor(50L, TimeUnit.SECONDS);

Здесь delayedExecutor() - static метод, используемый для возврата исполнителя, после заданной задержки.

Реактивное программирование

Для тех, кто ещё не знаком с парадигмой реактивного программирования, советуем прочитать наше в тему с примерами.
В Scala, Play, Akka уже были интегрированы reactive streams. Oracle решила добавить Reactive Streams API в Java SE 9.

Java SE 9 Reactive Streams API - фреймворк для реализации асинхронных, масштабируемых и параллельных приложений с использованием Java.

В Java SE 9 появятся следующие API:

  • java.util.concurrent.Flow;
  • java.util.concurrent.Flow.Publisher;
  • java.util.concurrent.Flow.Subscriber;
  • java.util.concurrent.Flow.Processor.

Diamond оператор для анонимных классов

Предположим, что у нас есть класс Box и мы хотим сделать его анонимным.
Вот как выглядит этот процесс в Java 8:

Box createBox(T content) { // Нужно поставить "T" здесь 🙁 return new Box(content) { }; }

Разве не очевидно, что Box должен быть типа T? Компилятор в случае не-анонимного класса выбрал бы нужный тип, так почему бы не сделать то же самое с анонимным?

Проблема в не обозначаемых (англ. non-denotable) типах, которые распознаются компилятором, а JVM - нет. (Такой случай может быть обработан компилятором, но вопрос - как корректно передать его JVM.)

Поэтому Diamond оператор не допускался в использовании с анонимными классами. Теперь же это возможно.

Вот как это выглядит в Java 9:

Class inJava { Box createBox(T content) { // Java 9 выводит ‘T’, потому что этот тип обозначаемый return new Box<>(content) { }; } Box createCrazyBox(Object content) { List innerList = Arrays.asList(content); // А этот тип не выводится, так как не можем его обозначить: // return new Box<>(innerList) { }; // Вместо этого обозначаем тот тип, который нам нужен: return new Box>(innerList) { }; } }

Дополнительные улучшения в классах

Stream emp = getEmployee(id); Stream empStream = emp.flatMap(Optional::stream);

Здесь используется метод Optional.stream(), который конвертирует всё в поток Employee.

Улучшения Stream API

В новой версии появятся как минимум четыре метода java.util.Stream . Как и stream, все они будут стандартными. Наиболее важными являются dropWhile и takeWhile методы.
Если вы знакомы с языком Scala или функциональным программированием, вы обязательно узнаете эти методы.

Простейшее применение stream:

Jshell> Stream.of(1,2,3,4,5,6,7,8,9,10).takeWhile(i -> i < 5).forEach(System.out::println);

Расширенные аннотации @Deprecated

До Java 9 @Deprecated - просто интерфейс-маркер. Многие разработчики . Их услышали и добавили возможности работы с устаревшими API. Например, появились инструменты для их анализа - forRemoval и since .

HTTP/2 клиент

Oracle планирует выкатить новый HTTP-клиент для поддержки протоколов HTTP/2 и WebSocket. Они заменяют HttpURLConnection API на новый, более производительный.
Новый API будет представлен в пакете «java.net.http». Он поддерживает как синхронный, так и асинхронный режимы.

Новый API можно посмотреть

Java - удивительно универсальный язык программирования. На сегодняшний день насчитывается около 6.5 млн разработчиков Java по всему миру. И все благодаря его утилитарности, простоте использования, безопасности и независимости платформы (он работает вне зависимости от того, какое оборудование или операционная система используются).

Java была разработана в 1995 году компанией Sun Microsystems и изначально создавалась для интерактивного телевидения и программирования бытовых электронных устройств. Тем не менее, публичный релиз Java 1.0 выявил смену фокуса на интернет-использование, превратив его в один из самых популярных языков программирования.

Очевидно, со времен 1.0 многое изменилось и вот наконец после множества переносов 21 сентября 2017 года состоялся релиз Java 9.

Особенности предыдущей (8-й) версии благодаря своей универсальности предоставили разработчикам возможность создавать решения для самых разных секторов бизнеса, включая финтех, здравоохранение и другие индустрии. Среди ключевых нововведений Java 8 следует отметить лямбда-выражения, стримы и изменения в API.

В свою очередь Java 9 также изобилует разнообразием обновлений “под капотом” и в API. Кроме очевидного проекта Jigsaw, на который возложена обязанность по внедрению модулярности в основные компоненты Java, новая версия может похвастаться ещё тремя важными фичами:

  1. Полная поддержка клиента HTTP 2.0: Вопрос в скорости, и HTTP 2.0 предоставляет более высокие результаты, колеблющиеся от 11.81% до 47.7% по сравнении с клиентом HTTP 1.1.
  2. Jshell: Новый инструмент командной строки. Если разработчик хочет автономно запустить несколько строк Java, то это можно выполнить без необходимости заворачивать все в отдельный метод или проект.
  3. Microbenchmark: Теперь производительность отдельных небольших частей кода можно измерить стандартизированным методом. Анализ JMH за наносекунды уникален для Java 9.


С полным списком советуем ознакомиться на портале сообщества Java, а также свободно скачать дистрибутив для ознакомления.

Это, пожалуй, самое ожидаемое нововведение - HTTP клиент с поддержкой как HTTP/2 протокола, так и WebSocket. Ведь SPDY протокол от Google, на базе которого основан HTTP/2 уже демонстрирует улучшенную производительность наравне с Netty или Jetty, поддержку неблокирующего режима (много потоков на запрос/ответ), а также Push-поддержку сервера, позволяющую отправлять ресурсы клиенту без явного запроса.

Новый API представлен как первый инкубаторный модуль для Java - экспериментальная фича, которая при должном развитии официально появится в следующей версии (то есть Java 10), либо будет удалена. Необычный концепт для Java, который поощряет эксперименты, но при этом не нарушает обратной совместимости.

Проект Jigsaw (в переводе “головоломка”) направлен на модуляризацию Java. Это значит, что программный код разбивается на части и организуется по модулям в зависимости от задач, которые эти модули выполняют. Это позволяет использовать модули повторно, упрощает их организацию и отладку. Что ведет к оптимизированной и отлаженной разработке ПО. Это ключевое отличие Java 9 от Java 8.

Второе большое преимущество - Java Platform становится легче и более масштабируемой. Это позволяет Java-приложениям работать даже на устройствах с низкой производительностью (так как для работы требуется меньше ресурсов). Это большое изменение особенно в контексте интернета вещей (IoT). Шаг вперед для Java, и шанс увидеть больше IoT-приложений, написанных на этом языке.

Jshell добавит встроенную поддержку и популяризирует подход Java к REPL (Read-Eval-Print-Loop). Это интерактивный инструмент, позволяющий тестировать небольшие части кода без необходимости создавать новые классы. Он оснащен функциями истории и автозаполнения, а также рядом других особенностей, включая сохранение и загрузку написанных выражений.
Скажем, если захочется запустить несколько строк Java самостоятельно, то теперь не придется заворачивать их в отдельный проект или метод. Что касается точек с запятой - можно забыть про них: Существуют различные альтернативы наподобие плагинов REPL для популярных IDE или веб-консоли Java REPL, но ни одна из них не является официальной.

Добавлена единая система протоколирования всех JVM-компонентов. Тем не менее, если мы посмотрим на плюсы и минусы Java 9, вот один из них. Вызовы протоколирования отдельных компонентов JVM отсутствуют, также как и протоколирование Java-кода в Java Development Kit

Очень часто сталкиваемся с заблуждением, что в Java есть только один сборщик мусора, хотя по факту их 4. Parallel / Throughput Collector считался дефолтным в прошлых версиях, но теперь его заменил G1, который был представлен в Java 7 и был разработан для лучшей поддержки куч размером более 4GB. Он вызывает меньше GC пауз, но если они все же происходят, то длятся дольше.

Этот API позволяет инкапсулировать набор изображений с разными разрешениями в единый объект. Таким образом, разработчик может получить изображение с определенным разрешением или все варианты внутри одного.

Примечательные обновления API: Concurrency и Stack Walking

Java 9 получил обновление CompletableFuture и java.util.concurrent.Flow. Flow - это Java-реализация Reactive Streams API. Reactive Streams помогают решить проблему back-pressure - накопления большого количества данных, которое происходит, когда скорость получения входящих событий выше, чем скорость их обработки приложением, что приводит к появлению буферов необработанных данных. Кроме того, в рамках улучшения concurrency, CompletableFuture получил обновление, которое решило проблемы, выявленные после его внедрения в Java 8. Оно включает поддержку задержек и тайм-аутов, улучшенную поддержку подклассов и несколько полезных методов.

Также хочется упомянуть о Stack Walking API. Все верно, Java 9 меняет подход к работе со стек-трейсами, предоставляя официальный способ обработки стек-трейсов, вместо приравнивания их к простому тексту.

Immutable List, Set, Map, и Map.Entry API

Создание множеств из нескольких элементов в Java 8 требовало нескольких строк кода. Теперь это можно осуществить только одной. Таким образом, один из самых времязатратных недостатков Java 8 был устранен. Это должно облегчить работу с массивами и ускорить некоторые функции.

Преимущества Java 9

Детали отличий Java 9 от Java 8 представляют большой интерес для разработчиков, а следовательно и для бизнеса, находящегося в поиске наилучших решений. Нововведения девятой версии улучшают следующие аспекты разработки:

  • Скорость выше благодаря поддержке клиента HTTP/2.
  • Приложения становятся ресурсоэффективней, потому что разработчики могут использовать только необходимые модули, а не всю JRE.
  • Разработка ускоряется благодаря системе модулей, позволяющей их повторное использование, упрощенную отладку и управление.
  • Появляется возможность анализа производительности очень маленьких частей кода благодаря Microbenchmarks.
  • Множества создаются одной строчкой кода.

Вот такая выжимка всех интересных изменений, которые мы отметили после выхода новой версии. Правда, теперь главный вопрос в том, когда компании начнут внедрять её, учитывая, что встречаются такие, кто ещё и восьмую версию не использует. В итоге пока решили не менять программу курса (не считая мелкой косметики) и оставить всё как есть, а уже в следующем году задуматься насчёт этого.

Песочница

крепыш 26 мая 2011 в 23:51

Изучение Java и получение «Java SE 6 Programmer» сертификата

  • Чулан *

Привет, Хабр!
Хочу поделится историей, как я (18-летний студент) взялся всерьёз за изучение Java SE 6 и как результат получил сертификат «Oracle Certified Professional, Java SE 6 Programmer».
Пост охватывает самые последние реалии получения сертификата и компиляцию ссылок на другие статьи, книги, тесты.
Кому интересно получение такой замечательной бумажки - прошу под кат…

1. Зачем нужна сертификация?

Раз вы здесь, то скорее всего уже знаете ответ на этот вопрос. Скажу о себе.

  • Благодаря подготовке к сертификации я методично и по нескольку раз изучил все основные разделы языка, читая подготовительные книги
  • При подготовке на тестах нашёл свои слабые места и устранил их
  • Получил знания по разработке программ, практических применениях ООП, познакомился с Design Patterns
  • Практически с нуля поднял свои знания по чтению английcкой технической литературы (у меня крайне плохо с языком, скорей всего хуже чем у вас)
  • Благодаря получению бумажки я формально закрепил результат изучения
  • Повысил самооценку (практически-полезных достижений в программировании пока не много, олимпиады не в счёт)
Я пока не искал себе работу, но сертификация должна помочь в этом, собственно выделится среди других студентиков-новичков было основной целью

2. Как происходит сдача
Сдаётся экзамен в авторизированном компанией Pearson VUE центре. Раньше был ещё Prometric, но с начала мая 2011 он не работает с Oracle. Стоимость (на март 2011) 120$ . Скидки для студентов были при Sun, сейчас их отменили. Язык русский или английский, я выбрал английский, т.к. говорят, что в русском кривой перевод, да и повод был поднять уровень языка.
Обатите внимание, что при оформлении заявки на экзамен в графе дата будет стоять сначала месяц, потом день. Американская система.
Экзамен идёт 3 часа, я закончил и дважды всё проверил за 2. В кабинете находится администратор и камеры. Перед началом просят выложить всю электронику в соседнем кабинете, выдают маркер и листок.
Сдаётся на компьютере, в десктопном приложении. 60 вопросов в формате теста. 1 или несколько вариантов ответов, если несколько - об этом сообщается. Так же есть задания на перетаскивание кусков в кода программу с недостающими кусками. Пример можете найти в онлайн-симуляторе Wizlabs, ссылка будет ниже.

Вот собственно и всё то, чем я руководствовался при подготовке. Информации очень много, однако если понимать что происходит - язык учится без проблем.
В сумме ушло месяц на размеренное чтение Эккеля и 10 дней задротства второй книги и тестов.
После сдачи сертификата будет возможность изменить своё имя, если опечатались, изменить адрес. Мне (Гатчина) сертификат прибыл ровно через 50 дней после сдачи, из Дублина.

Успехов!

Теги: java 6, сертификация

Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.

10 ответов

Класс java.util.Date на самом деле не устарел, просто этот конструктор, а также пара других конструкторов/методов устарели. Это было устарело, потому что такое использование не очень хорошо работает с интернационализацией. Вместо этого следует использовать класс Calendar:

Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 1988); cal.set(Calendar.MONTH, Calendar.JANUARY); cal.set(Calendar.DAY_OF_MONTH, 1); Date dateRepresentation = cal.getTime();

Классы java.util.Date , java.util.Calendar и java.text.SimpleDateFormat были слишком быстры, когда Java впервые запустила и развилась. Классы не были хорошо разработаны или реализованы. Усовершенствования были предприняты, таким образом, были обнаружены отклонения. К сожалению, попытки улучшения в значительной степени потерпели неудачу. Вы должны избегать этих классов вообще. Они вытесняются в Java 8 новыми классами.

Проблемы в коде

В java.util.Date есть и дата, и временная часть. Вы игнорировали часть времени в своем коде. Таким образом, класс Date займет начало дня, как определено вашим часовым поясом по умолчанию JVM, и примените это время к объекту Date. Таким образом, результаты вашего кода будут варьироваться в зависимости от того, какой компьютер он запускает или какой часовой пояс установлен. Наверное, не то, что вы хотите.

Если вам нужна только дата, без временной части, например, для даты рождения, вы можете не захотеть использовать объект Date . Вы можете сохранить только строку даты, в ISO 8601 формат YYYY-MM-DD . Или используйте объект LocalDate из Joda-Time (см. Ниже).

Joda времени

Первое, что нужно узнать на Java: Избегайте печально известных проблемных классов java.util.Date и java.util.Calendar в комплекте с Java.

Пример кода в Joda-Time 2.3

DateTimeZone timeZoneNorway = DateTimeZone.forID("Europe/Oslo"); DateTime birthDateTime_InNorway = new DateTime(1985, 1, 1, 3, 2, 1, timeZoneNorway); DateTimeZone timeZoneNewYork = DateTimeZone.forID("America/New_York"); DateTime birthDateTime_InNewYork = birthDateTime_InNorway.toDateTime(timeZoneNewYork); DateTime birthDateTime_UtcGmt = birthDateTime_InNorway.toDateTime(DateTimeZone.UTC); LocalDate birthDate = new LocalDate(1985, 1, 1);

Дамп для консоли...

System.out.println("birthDateTime_InNorway: " + birthDateTime_InNorway); System.out.println("birthDateTime_InNewYork: " + birthDateTime_InNewYork); System.out.println("birthDateTime_UtcGmt: " + birthDateTime_UtcGmt); System.out.println("birthDate: " + birthDate);

При запуске...

BirthDateTime_InNorway: 1985-01-01T03:02:01.000+01:00 birthDateTime_InNewYork: 1984-12-31T21:02:01.000-05:00 birthDateTime_UtcGmt: 1985-01-01T02:02:01.000Z birthDate: 1985-01-01

java.time

Где получить классы java.time?

Я столкнулся с этим вопросом как дубликат нового вопроса , в котором спрашивали, что не устаревший способ получить Date в конкретный год, месяц, и день был.

В ответах здесь показывается использование класса Calendar , и это было верно до тех пор, пока не выйдет Java 8. Но с Java 8 стандартный способ сделать это:

LocalDate localDate = LocalDate.of(1985, 1, 1);

И если вам действительно нужен java.util.Date , вы можете использовать предложения в этом вопросе .

Для получения дополнительной информации ознакомьтесь с API или учебники для Java 8.

Обратите внимание, что Calendar.getTime() является недетерминированным в том смысле, что часть дня по умолчанию соответствует текущему времени.

Чтобы воспроизвести, попробуйте выполнить следующий код пару раз:

Calendar c = Calendar.getInstance(); c.set(2010, 2, 7); // NB: 2 means March, not February! System.err.println(c.getTime());

Вывод, например:

Sun Mar 07 10:46:21 CET 2010

Запуск одного и того же кода через пару минут дает:

Sun Mar 07 10:57:51 CET 2010

Итак, в то время как set() заставляет соответствующие поля корректировать значения, он течет системное время для других полей. (Протестировано выше с помощью Sun jdk6 и jdk7)

Одна из причин, по которой конструктор устарела, заключается в том, что значение параметра year не является тем, что вы ожидаете. В javadoc говорится:

Начиная с версии JDK версии 1.1, заменяется на Calendar.set(year + 1900, month, date) .

Обратите внимание, что поле year - это количество лет с 1900 , поэтому ваш пример кода скорее всего не будет делать то, что вы ожидаете от него. И это точка.

У экземпляра класса Date есть состояние, а именно конкретный момент времени. Хотя вам не нужно знать это, когда вы используете класс Date, время представлено числом миллисекунд (положительным или отрицательным) с фиксированной точки, так называемой эпохой, которая равна 00:00:00 UTC, 1 января, 1970.

Класс Date не очень полезен для управления датами. Дизайнеры библиотеки Java считают, что описание даты, такое как "31 декабря 1999 года, 23:59:59", является произвольным соглашением, которым управляет календарь. Это конкретное описание следует за григорианским календарем, который является календарем, используемым в большинстве стран мира. Тот же момент времени будет описан по-разному в иранских солнечных (шамси), китайских или еврейских лунных календарях, не говоря уже о календаре, используемом вашими клиентами с Марса.

Дизайнеры библиотеки решили разделить проблемы сохранения времени и привязки имен к точкам времени. Поэтому стандартная библиотека Java содержит два отдельных класса: класс Date, который представляет собой момент времени, и класс GregorianCalendar, который выражает даты в знакомой календарной нотации. На самом деле класс GregorianCalendar расширяет более общий класс календаря, который описывает свойства календарей в целом. Стандартная библиотека Java также содержит реалии тайского буддийского и японского императорского календаря.

Разделительное измерение времени из календарей - хороший объектно-ориентированный дизайн. В целом, рекомендуется использовать отдельные классы для выражения разных понятий. Класс Date имеет только небольшое количество методов, которые позволяют вам сравнить два момента времени. Например, методы до и после говорят вам, что один момент времени до или после другого:

If (today.before(birthday)) System.out.println("Still time to shop for a gift.");

Класс GregorianCalendar имеет гораздо больше методов, чем класс Date. В частности, он имеет несколько полезных конструкторов.

И некоторых прочих вкусняшек в JDK8, но тем не менее, и этот релиз привнёс что-то полезное в арсенал java-разработчика. Под катом можно найти более детальный обзор новшеств. По наиболее интересным из них, скорее всего, будут написаны дополнительные статьи с примерами использования.

Виртуальная машина

InvokeDynamic

Давно ожидаемое любителями динамических языков программирования решение, позволяющее взаимодействовать с динамическими языками практически без потери производительности. Разработчики JVM очень хвалят это творение, но, к сожалению, пока не предоставили примеров его использования в реальной жизни. На страничке проекта есть немного документации, но она совсем не тривиальна. Потому на этот счёт можно ожидать статьи.

Строгая проверка бинарных класс-файлов

В Java 7 ввели новый верификатор , получивший название «проверяющего типы» (typechecking verifier), который работает несколько быстрее и поддерживает новые языковые фичи. Этот верификатор обязательно будет использоваться для бинарников версии 51 и более, то есть >= SE7.

Синтаксический сахар

Про Project Coin уже писали много, в том числе и на хабре, поэтому в дальнейшем представлении он, полагаю, не нуждается. Впрочем, вы всегда можете исправить моё заблуждение в комментариях:) Стоит только отметить, что coin разбили на две части, и наиболее трепетно ожидаемая, содержащая приятности вроде упрощённого создания коллекций, в SE 7 не войдёт.

Изменения в ядре

Обновление архитектуры classloader"а

В новой версии внесены исправления в classloader, позволяющие избежать deadlock-ов в неиерархических топологиях загрузчиков. Благодаря новому classloader-у существенно расширились возможности разработчика по загрузке классов. Более подробно можно почитать , при желании тоже можно написать статью.

Метод close для URLClassLoader

Тут особо и говорить нечего: теперь можно освободить ресурсы, которые держит classloader. Подробнее .

Обновления для java.util.concurrent и коллекций

Новый релиз предоставляет множество новых полезных библиотек для многопоточных приложений. Об одной из них, Phaser , уже на хабре. Помимо него включены легковесный fork/join(UPD: ) и ещё некоторые барьеры, concurrent-версии деков на связных списках и thread-local генератор случайных чисел. Более подробное ожидание ожидается в отдельной статье.

Интернационализация

Unicode 6.0

Теперь последняя поддерживаемая версия Unicode стала 6.0.

Улучшение java.util.Locale

Теперь этот класс поддерживает IETF BCP 47(Метки для определения языков) и UTR 35(локализованную языковую разметку зыков)

Разделены локаль пользователя и локаль графического интерфейса

Теперь форматирование текста и отображение чего-либо на экране имеют независимые локали. Подробнее можно посмотреть в обновлённом javadoc .

Ввод-вывод и работа с сетью

NIO.2

Тоже не нуждающийся в особом представлении новый API для доступа к файловой системе, масштабироемого асинхронного IO-взаимодействия, полноценной работы с zip/jar архивами как с файловой системой и прочего. Все нововведения имеет смысл вынести в отдельный топик. Ознакомиться с официальной документацией можно .

Поддержка стандартов

Добавлена поддержка SCTP для Solaris, SDP для поддержки InfitiBand на Linux и Solaris, поддержка появившегося в Windows Vista стека IPv6 и поддержка TLS 1.2

Безопасность и шифрование

Теперь доступны из коробки стандартные алгоритмы эллиптических кривых. Правда, в официальном релизе не дали указаний относительно того, где их найти. Поверхностный поиск по javax.crypto результатов не дал.

Клиентская часть

Конвейер XRender для Java2D

Благодаря расширению XRender для X11, у Java2D появился доступ к большой части возможностей современных GPU.

Введение API для новых графических возможностей

В java 6u10 появилась поддержка новых фич вроде полупрозрачных окошек и окошек поизвольный формы, ровно как и смешивание тяжеловесной и легковесной графики. Теперь для этого появился API. Подробнее можно почитать в документации , и вполне возможно, что скоро на эту тему появится пост.

Новый look-and-feel

Добавлен новый look-and-feel. Как утверждают разработчики, он относится к новому поколению, но лично меня не впечатлило. Хотя, конечно, это всяко лучше, чем то, что было раньше. Скриншоты есть .

Новый декаратор JXLayer

Про него не найти особо подробной информации, есть ссылка на официальный проект .

Новый синтезатор звука

На замену старому проприетарному синтезатору пришэл новый, под названием Gervill . Разработчики его хвалят, но я ничего на этот счёт сказать не могу.

Web

Обновлён стек XML, теперь используются версии JAXP 1.4, JAXB 2.2a, and JAX-WS 2.2.

Управление

MBean-ы теперь могут сообщать о загрузке процессора как всей системы, так и JVM и умеют отправлять уведомления, когда происходит сборка мусора.

Итак, покрыта большая часть нововведений. Пожалуйста, отпишитесь в комментариях, о чём бы вы хотели прочитать подробнее.



Рекомендуем почитать

Наверх