Песочница
крепыш 26 мая 2011 в 23:51Привет, Хабр!
Хочу поделится историей, как я (18-летний студент) взялся всерьёз за изучение Java SE 6 и как результат получил сертификат «Oracle Certified Professional, Java SE 6 Programmer».
Пост охватывает самые последние реалии получения сертификата и компиляцию ссылок на другие статьи, книги, тесты.
Кому интересно получение такой замечательной бумажки - прошу под кат…
1. Зачем нужна сертификация?
Раз вы здесь, то скорее всего уже знаете ответ на этот вопрос. Скажу о себе.
2. Как происходит сдача
Сдаётся экзамен в авторизированном компанией Pearson VUE
центре. Раньше был ещё Prometric, но с начала мая 2011 он не работает с Oracle. Стоимость (на март 2011) 120$
. Скидки для студентов были при Sun, сейчас их отменили. Язык русский или английский, я выбрал английский, т.к. говорят, что в русском кривой перевод, да и повод был поднять уровень языка.
Обатите внимание, что при оформлении заявки на экзамен в графе дата будет стоять сначала месяц, потом день. Американская система.
Экзамен идёт 3 часа, я закончил и дважды всё проверил за 2. В кабинете находится администратор и камеры. Перед началом просят выложить всю электронику в соседнем кабинете, выдают маркер и листок.
Сдаётся на компьютере, в десктопном приложении. 60 вопросов в формате теста. 1 или несколько вариантов ответов, если несколько - об этом сообщается. Так же есть задания на перетаскивание кусков в кода программу с недостающими кусками. Пример можете найти в онлайн-симуляторе Wizlabs, ссылка будет ниже.
Вот собственно и всё то, чем я руководствовался при подготовке. Информации очень много, однако если понимать что происходит - язык учится без проблем.
В сумме ушло месяц на размеренное чтение Эккеля и 10 дней задротства второй книги и тестов.
После сдачи сертификата будет возможность изменить своё имя, если опечатались, изменить адрес. Мне (Гатчина) сертификат прибыл ровно через 50 дней после сдачи, из Дублина.
Успехов!
Теги: java 6, сертификация
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Ожидается, что новая версия Java 9 выйдет уже 27 июля 2017 года. Давайте разберёмся, какие функции появятся, и расскажем, зачем они нужны.
Вот список важных нововведений Java 9:
С помощью примеров расскажем подробнее об этих функциях.
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
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} // неизменяемое отображение
В 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 9 поставляется с 92 модулями. Мы можем использовать их или создать свои, например:
Module com.foo.bar { }
Каждый модуль имеет имя, связанный код и другие ресурсы.
Ожидается, что в Java SE 9 будут произведены улучшения по части API. Будут добавлены несколько новых классов и методов для более удобного управления действиями операционной системы.
Два новых интерфейса в Process API:
Пример Process API:
ProcessHandle currentProcess = ProcessHandle.current(); System.out.println("Current Process Id: = " + currentProcess.getPid());
Здесь нами был создан объект типа ProcessHandle для работы с действиями операционной системе.
Как мы знаем, в 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 не обязательно объявлять новую переменную.
В 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:
Предположим, что у нас есть класс Box
Вот как выглядит этот процесс в Java 8:
Разве не очевидно, что Box должен быть типа T? Компилятор в случае не-анонимного класса выбрал бы нужный тип, так почему бы не сделать то же самое с анонимным?
Проблема в не обозначаемых (англ. non-denotable) типах, которые распознаются компилятором, а JVM - нет. (Такой случай может быть обработан компилятором, но вопрос - как корректно передать его JVM.)
Поэтому Diamond оператор не допускался в использовании с анонимными классами. Теперь же это возможно.
Вот как это выглядит в Java 9:
Class inJava
{
>(innerList) { };
}
}
Stream
Здесь используется метод Optional.stream(), который конвертирует всё в поток Employee.
В новой версии появятся как минимум четыре метода 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);
До Java 9 @Deprecated - просто интерфейс-маркер. Многие разработчики . Их услышали и добавили возможности работы с устаревшими API. Например, появились инструменты для их анализа - forRemoval и since .
Oracle планирует выкатить новый HTTP-клиент для поддержки протоколов HTTP/2 и WebSocket. Они заменяют HttpURLConnection API на новый, более производительный.
Новый API будет представлен в пакете «java.net.http». Он поддерживает как синхронный, так и асинхронный режимы.
Новый API можно посмотреть
И некоторых прочих вкусняшек в JDK8, но тем не менее, и этот релиз привнёс что-то полезное в арсенал java-разработчика. Под катом можно найти более детальный обзор новшеств. По наиболее интересным из них, скорее всего, будут написаны дополнительные статьи с примерами использования.
Итак, покрыта большая часть нововведений. Пожалуйста, отпишитесь в комментариях, о чём бы вы хотели прочитать подробнее.
Кодовое имя Oak .
Первый выпуск. Первой стабильной версией стала JDK 1.0.2.
Наиболее значимые дополнения:
Кодовое имя Playground .
Следующей базовой версией Java стала версия Java 2, символизировавшая собой второе поколение. Первой версии Java 2 был присвоен номер 1.2. С появлением версии 2, SUN Microsystems стала выпускать Java в виде пакета J2SE (Java 2 Platform Standard Edition - Стандартная версия платформы Java 2) и теперь номера версий указываются применительно к этому продукту.
Java 2 , или Java 2.0 - дальнейшее развитие и усовершенствование спецификации исходного стандарта языка и платформы Java , на который теперь принято ссылаться как на Java 1.0. В настоящее время спецификация платформы Java 2 продолжает интенсивно развиваться и обогащаться, пополняясь новыми возможностями, особенно из за конкуренции с платформой.Net, перенявшей у Java ряд ключевых особенностей.
Основными усовершенствованиями Java 2 по сравнению с Java 1.0 являются:
Кодовое имя Kestrel .
Кодовое имя Merlin .
Кодовое имя Tiger . Спецификация Java 5 была выпущена в сентябре 2004 года. В данной версии разработчики внесли в язык целый ряд принципиальных дополнений:
Основная статья: История версий Java 6
Кодовое имя Codename Mustang .
Ожидается в середине 2013 года . Будет содержать
Java | ||
---|---|---|
Платформы | ||
Технологии Sun | ||
Основные сторонние технологии | ||
История | ||
Свойства языка | ||
Скриптовые языки | ||
Конференции Java |
JavaOne |
Wikimedia Foundation . 2010 .
Что нового появилось в Java SE 6 ?
Если сравнивать с тем, что изменилось в Java 5.0 по сравнению с Java 1.4, то такого рода изменений не произошло. Совсем. Язык остался таким, каким он был.
А вот если посмотреть на другие аспекты, то тут произошло мнго изменений, которые я постараюсь описать. Вряд ли смогу описать все подробно – думаю, что для этого проще зайти на сайт Sun и почитать –
Данная работа появилась именно в результате чтения всех новинок. А там есть что посмотреть. Я не включил описание всех изменений, указанных в официальной документации потому, что посчитал не все столь важным и нужным. Да и объем такой большой, что заняло бы это у меня много времени. Задача данной статьи просто коснуться того, что изменилось. Если вас заинтересует какая-то область, то идите по ссылкам. Итак, давайте по порядку.
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-запросе.
Есть некоторые изменения по безопасности, среди которых я бы выделил поддержку сертификатов.
Internationalization Support
Наверно самое впечатляющее для меня было то, что окзазывается поддерживается не один Григорианский календарь, а целых три:
— Григорианский календарь (с версии 1.1)
— Буддисткий календарь (с версии 1.4)
— Японский императорский календарь (с версии 1.6)
I / O Support
Изменения затронули два пакета:
Появился новый класс – Console. (http://java.sun.com/javase/6/docs/api/java/io/Console.html)
Он предназначен для взаимодействия с символьно-оринетированным устройством. В описании класса есть неплохой пример для ввода пароля
Console cons; char passwd; if ((cons = System.console()) != null && (passwd = cons.readPassword("[%s]", "Password:")) != null) { ... java.util.Arrays.fill(passwd, " "); }
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)
Здесь было приятно увидеть следующее. Появилось два класса-потока:
Это позволяет передавать по сети сжатые данные, что не может не радовать.
Кроме этого были сделаны дополнения:
Список файлов в архиве теперь не ограничен 64Кб (была такая проблема при больших архивах, где много файлов)
Для Windows сделаны дополнения: имя файла теперь может быть длиннее 256 символов и ограничение на одновременное открытие более 2000 zip -файлов тоже снято. Наверно какое-то ограничение осталось, но видимо оно теперь слишком большое.
Утилита JAR теперь имеет ключик e – он позволяет задать точку входа – аналог аттрибута Main - Class в манифесте.
JMX (Java Management Extensions)
Поначалу я думал. что смогу осилить описание изменений, которые сделаны в данной области, но не думаю, что этот труд будет оценен. В двух словах – введена поддержка generics, улучшены свойства MBeans и исправлено достаточно много багов. Больше не хотелось бы говорить, кому очень надо – идите по ссылке JMX API Enhancements
Хотя думаю, что те, кто заинтересован в такой инфомрации уже там побывали.
JPDA (Java Platform Debugger Architecture)
Для тех, кого этот вопрос мало интересует (а таких думаю как раз большинство) этот раздел вряд ли представляет большой интерес.
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-аутентификации и работы с куками.
Perfomance
Я не думаю, что надо перечислять все, что там сделано, но с другой стороны не упомянуть об этом было бы не очень разумно. В данном случае придется опять обойтись ссылкой — Java SE 6 Performance White Paper
Единственное, чтобы я выделил – результаты тестов, представленные в данной статье. Впечатлило. Общая производительность вычислений возрасла блее чем на 70%. Операции ввода/вывода – в два раза.
Scripting
Security
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. И тогда буду считать, что писал эту статью не зря. Спасибо.