Изучаем Java EE 7 - [10]
>// Без ромбовидного оператора
>List
>Map
>····new HashMap
>// C ромбовидным оператором
>List
>Map
Конструкция try-with-resources
В некоторых Java API закрытием ресурсов необходимо управлять вручную, обычно с помощью метода close в блоке finally. Это касается ресурсов, управляемых операционной системой, например файлов, сокетов или соединений интерфейса JDBC. Листинг 1.8 показывает, как необходимо ставить закрывающий код в блоке finally с обработкой исключений, но удобочитаемость кода из-за этого снижается.
>try {
>··InputStream input = new FileInputStream(in.txt);
>··try {
>····OutputStream output = new FileOutputStream(out.txt);
>····try {
>······byte[] buf = new byte[1024];
>······int len;
>······while ((len = input.read(buf)) >= 0)
>······output.write(buf, 0, len);
>····} finally {
>······output.close();
>····}
>··} finally {
>····input.close();
>··}
>} catch (IOException e) {
>··e.printStrackTrace();
>}
Конструкция try-with-resources решает проблему читаемости с помощью нового, более простого синтаксиса. Это позволяет ресурсам в блоке try автоматически высвобождаться в его конце. Нотация, описанная в листинге 1.9, может использоваться для любого класса, реализующего новый интерфейс java.lang.AutoCloseable. Сейчас он реализуется множеством классов (InputStream, OutputStream, JarFile, Reader, Writer, Socket, ZipFile) и интерфейсов (java.sql.ResultSet).
>try (InputStream input = new FileInputStream(in.txt);
>·····OutputStream output = new FileOutputStream(out.txt)) {
>··byte[] buf = new byte[1024];
>··int len;
>··while ((len = input.read(buf)) >= 0)
>····output.write(buf, 0, len);
>} catch (IOException e) {
>··e.printStrackTrace();
>}
Multicatch-исключения
До появления Java SE 6 блок захвата мог обрабатывать только одно исключение в каждый момент времени. Поэтому приходилось накапливать несколько исключений, чтобы потом применить нужное действие для обработки исключений каждого типа. И как показано в листинге 1.10, для каждого исключения зачастую необходимо выполнять одно и то же действие.
>try {
>··// Какое-либо действие
>} catch(SAXException e) {
>··e.printStackTrace();
>} catch(IOException e) {
>··e.printStackTrace();
>} catch(ParserConfigurationException e) {
>··e.printStackTrace();
>}
Если разные исключения требуют одинаковой обработки, в Java SE 7 вы можете добавить столько типов исключений, сколько нужно, разделив их прямым слешем, как показано в листинге 1.11.
>try {
>··// Какое-либо действие
>} catch(SAXException | IOException | ParserConfigurationException e) {
>··e.printStackTrace();
>}
NIO.2
Если вам, как и многим Java-разработчикам, с трудом удается читать или записывать некоторые файлы, вы оцените новую возможность Java SE 7: пакет ввода/вывода java.nio. Этот пакет, обладающий более выразительным синтаксисом, призван заменить существующий пакет java.io, чтобы обеспечить:
• более аккуратную обработку исключений;
• полный доступ к файловой системе с новыми возможностями (поддержка атрибутов конкретной операционной системы, символических ссылок и т. д.);
• добавление понятий FileSystem и FileStore (например, возможность разметки диска);
• вспомогательные методы (перемещение/копирование файлов, чтение/запись бинарных или текстовых файлов, путей, каталогов и т. д.).
В листинге 1.12 показан новый интерфейс java.nio.file.Path (используется для определения файла или каталога в файловой системе), а также утилитный класс java.nio.file.Files (применяется для получения информации о файле или манипулирования им). Начиная с Java SE 7 рекомендуется использовать новый NIO.2, даже пока старый пакет java.io не вышел из употребления. В листинге 1.12 код получает информацию о файле source.txt, копирует его в файл dest.txt, отображает его содержимое и удаляет его.
>Path path = Paths.get("source.txt");
>boolean exists = Files.exists(path);
>boolean isDirectory = Files.isDirectory(path);
>boolean isExecutable = Files.isExecutable(path);
>boolean isHidden = Files.isHidden(path);
>boolean isReadable = Files.isReadable(path);
>boolean isRegularFile = Files.isRegularFile(path);
>boolean isWritable = Files.isWritable(path);
>long size = Files.size(path);
>// Копирует файл
>Files.copy(Paths.get("source.txt"), Paths.get("dest.txt"));
>// Считывает текстовый файл
>List
>for (String line: lines) {
>··System.out.println(line);
>}
>// Удаляет файл
>Files.delete(path);
Обзор спецификаций Java EE
Java EE — это обобщающая спецификация, которая объединяет и интегрирует остальные. На сегодняшний день для обеспечения совместимости с Java EE 7 сервер приложений должен реализовывать 31 спецификацию, а разработчику для оптимального использования контейнера необходимо знать тысячи API. Несмотря на то что требуется знать столько спецификаций и API, основная цель Java EE 7 — упростить платформу, предоставив несложную модель, основанную на POJO, веб-профиле и отсечении некоторых неактуальных технологий.
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.