Что нового появилось в Java SE 6 ?
Если сравнивать с тем, что изменилось в Java 5.0 по сравнению с Java 1.4, то такого рода изменений не произошло. Совсем. Язык остался таким, каким он был.
А вот если посмотреть на другие аспекты, то тут произошло мнго изменений, которые я постараюсь описать. Вряд ли смогу описать все подробно – думаю, что для этого проще зайти на сайт Sun и почитать –
Java SE 6 — Features and Enhancements
В общем-то если вы умеете читать английскую документацию, то дальше вам надо просто идти на сайт, который я указал и честно прочитать все, что там встретится. И написать гораздо более интересную статью, чем я.
Данная работа появилась именно в результате чтения всех новинок. А там есть что посмотреть. Я не включил описание всех изменений, указанных в официальной документации потому, что посчитал не все столь важным и нужным. Да и объем такой большой, что заняло бы это у меня много времени. Задача данной статьи просто коснуться того, что изменилось. Если вас заинтересует какая-то область, то идите по ссылкам. Итак, давайте по порядку.
Collection Framework
Здесь появились новые интерфейсы и реализации этих интерфейсов.
Интерфейсы:
Deque – развитие интерфейса Queue. Название расшифровывается как «double ended queue» и произносится как ДЕК. Как вы наверно догадались основная идея в том, чтобы организовать очередь, которая работает с обоих концов – как FIFO (интерфейс Queue) и LIFO (интерфейс Stack)
BlockingDeque – интерфейс позволяет блокировать себя при ожидании поступления в очередь элемента.
NavigableSet, NavigableMap – интерфейсы позволяют искать наиболее близкое значение в наборе.
ConcurrentNavigableMap – тоже, что и NavigableMap, но еще поддерживает рекурсию в подмэпах. Не смотрел более подробно – предоставляю это сделать вам самим.
Реализации (я думаю. что вы сами догадаетесь, какие интерфейсы они реализуют):
ArrayDeque, ConcurrentSkipListSet, ConcurrentSkipListMap, LinckedBlockingDeque
Также надо отметить, что изменились существующие классы, которые теперь реализуют новые интерфейсы.
Это – LinkedList, TreeSet, TreeMap.
Deployment (Java Web Start and Java Plug-in)
В общем основная идея в том, что теперь изменен формат кэширования приложений для Web Start. Также появились некоторые дополнительные фичи при загрузке – система управления кэшем, поддержка параметра “no-cache” в HTTP-запросе.
Есть некоторые изменения по безопасности, среди которых я бы выделил поддержку сертификатов.
Ну и настоятельно рекомендую обратить внимание на улучшенный интерфейс при работа с Java Console.
Internationalization Support
Наверно самое впечатляющее для меня было то, что окзазывается поддерживается не один Григорианский календарь, а целых три:
— Григорианский календарь (с версии 1.1)
— Буддисткий календарь (с версии 1.4)
— Японский императорский календарь (с версии 1.6)
I/O Support
Изменения затронули два пакета:
java.io
Появился новый класс – Console. (http://java.sun.com/javase/6/docs/api/java/io/Console.html)
Он предназначен для взаимодействия с символьно-оринетированным устройством. В описании класса есть неплохой пример для ввода пароля
1 2 3 4 5 6 |
Console cons; char[] passwd; if ((cons = System.console()) != null && (passwd = cons.readPassword("[%s]", "Password:")) != null) { ... java.util.Arrays.fill(passwd, ' '); } |
Также следует обратить внимание на новые методы в классе File для работы с диском – getTotalSpace(), getFreeSpace(), getUsableSpace(). И для работы с файлом –setWritable(), getReadable(), getExecutable()
java.nio
Сделана новая имплементация для java.nio.channels.SelectorProvider. Как пишут, он теперь более масштабируем.
И изменен метод lock для класса java.nio.channels.FileChannel. Так что тем, кто их использует надо быть внимательнее.
JAR (Java Archive Files)
Здесь было приятно увидеть следующее. Появилось два класса-потока:
java
.
util
.
zip
.
DeflaterInputStream
– чтение сжатых данных из потока
java
.
util
.
zip
.
InflaterOutputStream
– запись сжатых данных в поток
Это позволяет передавать по сети сжатые данные, что не может не радовать.
Кроме этого были сделаны дополнения:
- Список файлов в архиве теперь не ограничен 64Кб (была такая проблема при больших архивах, где много файлов)
- Для
Windows
сделаны дополнения: имя файла теперь может быть длиннее 256 символов и ограничение на одновременное открытие более 2000
zip
-файлов тоже снято. Наверно какое-то ограничение осталось, но видимо оно теперь слишком большое.
- Утилита
JAR
теперь имеет ключик
e
– он позволяет задать точку входа – аналог аттрибута
Main
-
Class
в манифесте.
JMX (Java Management Extensions)
Поначалу я думал. что смогу осилить описание изменений, которые сделаны в данной области, но не думаю, что этот труд будет оценен. В двух словах – введена поддержка generics, улучшены свойства MBeans и исправлено достаточно много багов. Больше не хотелось бы говорить, кому очень надо – идите по ссылке JMX API Enhancements
Хотя думаю, что те, кто заинтересован в такой инфомрации уже там побывали.
JPDA (Java Platform Debugger Architecture)
Здесь в общем-то тоже какой-то аховой информации я не обнаружил. выделил бы следующее:
— JVMDI теперь удален. А функциональность как я понял перенесена в JVM TI
— исправлено немалое число багов
Для тех, кто заинтересуется Java Debug API советую посмотреть — Java™ Debug Interface
Для тех, кого этот вопрос мало интересует (а таких думаю как раз большинство) этот раздел вряд ли представляет большой интерес.
JVM TI (Java Virtual Machine Tool Interface)
Тем кто знает, что такое JVM TI могу сообщить только одно – он был улучшен и изменен. Более подробно вряд ли есть смысл описывать. Тем же кто очень хочет узнать. что это такое советую заглянуть вот сюда — JVM™ Tool Interface
JConsole for Java SE 6
Тем кто пользовался могу сообщить, что теперь JConsole является официально поддерживаемой утилитой. Тем кто не знает, что это такое скажу только что это утилита, которая в графическом виде позволяет заниматься мониторингом JVM. Насколько это важно и нужно – решать вам.
Networking Features
Здесь есть что посмотреть.
Во-первых надо обратить внимание на класс java.net.NetworkInterface. Он теперь позволяет получить много информации: о маске подсети, broadcast адрес, MAC-адрес.Во-вторях появился новый класс —java.net.InterfaceAddress. Позволяет получить информацию о сетевом интерфейсе, причем как для IPv4, так и для IPv6.Изменения коснулись также поддержки NTLM, HTTP-аутентификации и работы с куками.
Отдельно я бы еще выделил создание двух пакетов, которые позволяют построить легковесный HTTP-сервер. Подробнее можно посмотреть здесь — Java™ HTTP Server
Perfomance
Я не думаю, что надо перечислять все, что там сделано, но с другой стороны не упомянуть об этом было бы не очень разумно. В данном случае придется опять обойтись ссылкой — Java SE 6 Performance White Paper
Единственное, чтобы я выделил – результаты тестов, представленные в данной статье. Впечатлило. Общая производительность вычислений возрасла блее чем на 70%. Операции ввода/вывода – в два раза.
Scripting
Основная задача описана в JSR-223 Scripting for the Java Platform. Она состоит в том, чтобы можно «на лету» выполнить программу, написанную на каком-либо скриптовом языке. Главное, чтобы был реализован движок, который можно использовать. Java SE 6 содержит Rhino: JavaScript for Java — проект от Mozilla.
Полное описание этого крайне удобного механизма можно найти здесь — Java Scripting Programmer’s Guide
Security
Здесь тоже немало изменений. Я бы выделил несколько областей: XML Digital Signature API, Smart Card I/O API, дополнительные опции утилит jarsigner и keytool и всякие поддержки штук, которые понятны тем, кто этим занимается. Я не очень с этим сталкивался, потому лучше вам посмотреть самим — Java™ 6 Security Enhancements
Drag and Drop
Кроме того, что этот механизм теперь сделан более удобным для программистов сказать нечего. Равзе что пример спасет ситуацию.
Swing
Здесь я бы выделил несколько моментов (тем более еще есть в памяти конференция)
Вот какие моменты осветили:
1. TrayIcon — в общем радуйтесь — теперь иконка в трее будет там, где это только возможно
2. SpalshScreen — при старте приложения можно вывести картинку на время закгрузки. И если загрузка продолжается уже после старта JVM (вам что-то необходимо добавить, соеденить и прочая) вы можете управлять вашей картинкой. Т.е. что-то рисовать на ней.
3. Обработка текста на LCD. В общем идея следующая — при красивой прорисовке текста на LCD используеся не один цвет, а несколько для улучшения восприятия. Вот это и введено будет в 1.6
4. Улучшена скорость OpenGL и DirectX
5. Т.к. заканчивается срок лицензии на формат GIF будет сделан GIF-Writer с помощью которого можно будет записывать графически файлы
6. Улучшения для деплоя приложения — в общем какие-то изменения для WebStart. Что именно — не упомнить.
7. SWING — тут изменений было несколько, так что буду перечислять подряд
7.1. Look & Feel — теперь они будут использовать сами ОС и ваши приложения будут выглядеть так же как нативные приложения. И если вдруг вы введете новые темы в вашу ОС, то JAVA-риложения подхватят это тоже. Т.е. теперь LF используют данные из ОС, чтобы рисовать компоненты.
7.2. SwingWorker — записал, но к чему это относится — не могу вспомнить. По-моему к тредам про прорисовке. Т.е. что-то там стало лучше.
7.3. LayoutEnhacement — дополнительные возможности для лэйаутов.
7.4. Drag&Drop — теперь это будет очень просто реализовать
7.5. True Double Buffering — при перетаскиваниии окна поверж другого могли возникать пустые прямоугольники. Теперь этого не будет. Вообще прорисовка будет еще быстрее. Посмотрим.
7.6. Text Printing — была такая проблема, что текст мог раюиваться при печати пополам — вержняя часть строки на одной странице, нижняя — на другой. Теперь этой пробелмы не будет, утверждал докладчик.
7.7. JTable теперь будет уметь сортировать и фильтровать
7.8. В табуляторы теперь можно будет помещать любые компоненты. Т.е. теперь закладочки будут делать то, что вы от них захотите. Что достаточно удобно.
Я конечно же осветил не все. Но может быть кому-то данная статья поможет сориентироваться в нововведениях Java SE 6. И тогда буду считать, что писал эту статью не зря. Спасибо.