1. Новые функции Java JDK1.5
1. Дженерики:
List <string> strs = new ArrayList <string> (); // Укажите тип хранения для коллекции. При хранении данных в приведенной выше сборе данные строки должны храниться, в противном случае компилятор сообщит об ошибке
2. для экологически чистых
Например, мы можем пройти вышеупомянутую коллекцию в For For-E-wee, что облегчает и проще
for (String S: strs) {System.out.println (s);}Примечание. При использовании для прохождения коллекции коллекция должна реализовать интерфейс итератора
3. Функции автоматического распаковки и упаковки
Кода -копия выглядит следующим образом:
Что это значит?
JDK1.5 определяет класс инкапсуляции для каждого основного типа данных. Сделать основные типы данных в Java также имеют свои собственные объекты, например: int -> Integer,
двойной -> двойной,
долго -> долго,
char -> персонаж,
float -> float,
логический -> логический,
коротко -> короткий,
байт -> байт
Автоматическая упаковка: преобразовать основные типы в объекты, например: int -> Integer
Автоматическая распаковка: преобразовать объекты в основные типы данных, например: Integer -> int
Проблема, которую коллекция не может сохранить основные типы данных до того, как JDK1.5 теперь может быть решена.
4. Перечисление:
Перечисление - это сравнительная особенность, представленная JDK1.5. Ключевое слово enum
Например: определить перечисление, представляющее светофорный свет
public enum myenum {красный, зеленый, желтый}5. Переменные параметры
Что это значит? Позвольте мне привести вам пример: перед JDK1.5, когда мы хотели передать несколько параметров одного типа методу, у нас было два метода для его решения, 1. Прямо передайте массив, 2. Передайте столько параметров, сколько и.
Например:
public void printColor (String Red, String Green, String Yellow) {} или
public void printcolor (string [] colors) {} Хотя параметры написания метода таким образом могут достичь желаемых эффектов, разве это не немного неприятно? Кроме того, что мы должны делать, если количество параметров неясно? Параметры переменной, предоставленные Java JDK1.5, могут идеально решить эту проблему, например:
public void printColor (String ... Colors) {}
Это может быть определено так, что это значит? Если параметры имеют один и тот же тип, вы можете использовать форму «Тип + три точки, а затем имя параметра». Преимущество этого заключается в том, что до тех пор, пока типы параметров одинаковы, нет ограничения на количество передаваемых параметров: параметр переменной должен быть последним элементом в списке параметров (эта функция применяется как к объектам, так и к основным типам данных)
6. Статический импорт
Преимущества: использование статического импорта может сделать все статические переменные и статические методы импортированного класса, непосредственно видимых в текущем классе. Использование этих статических участников не нужно давать свои имена классов.
Недостатки: чрезмерное использование уменьшит читаемость кода
7. Библиотека параллелизма потока
Библиотека параллелизации потока является расширенной особенностью многопоточного чтения, предложенная Java 1.5. Он расположен в упаковке: java.util.concurrent
включать
1. ТЕРЕНИ МУТЕКС КЛАСС Описание: Lock, RedWritelock
2. Описание связи потока: условие
3. БИЛЕР
Исполнители
3. Синхронизируйте очередь
ArrayBlockingQueue
4. Синхронизировать коллекции
Concurrenthashmap, copyonwritearraylist
5. Инструмент синхронизации потоков
Семфор
Есть еще много (очень важных) содержимого о библиотеках параллелизма потоков, поэтому я не буду перечислять их здесь один за другим. Заинтересованные друзья могут проверить справочные документы.
2. Новые функции JDK1.6
1. Класс и класс Systemtray
Первое может использоваться для открытия браузера системы по умолчанию для просмотра указанного URL -адреса, откройте электронный клиент по умолчанию системы для отправки электронных писем на указанный адрес электронной почты, используйте приложение по умолчанию для открытия или редактирования файлов (например, использование Notepad, чтобы открыть файл с TXT в качестве суффикса) и использовать систему Printer для печати документов; Последнее может быть использовано для создания программы лотка в области системного лотка.
2. Используйте JAXB2 для реализации отображения между объектами и XML
JAXB является аббревиатурой архитектуры Java для привязки XML, которая может преобразовать объект Java в формат XML и наоборот.
Мы называем отображение между объектами и реляционными базами данных ORM, и на самом деле отображение между объектами и XML также можно назвать OXM (картирование объекта XML). Оказывается, Jaxb является частью Java EE. В JDK1.6 Sun помещает его в Java SE, что также является обычной практикой Sun. Версия JAXB, которая поставляется с JDK1.6, составляет 2.0. По сравнению с 1,0 (JSR 31), JAXB2 (JSR 222) использует новую аннотацию функции JDK5 для определения классов и атрибутов, которые значительно упрощают рабочую нагрузку разработки. Фактически, в Java EE 5.0 EJB и веб -службы также упрощают развитие посредством аннотации. Кроме того, JAXB2 использует Stax (JSR 173) для обработки XML -документов внизу.
В дополнение к JAXB, мы также можем выполнять те же функции через XMLBeans, Castor и т. Д.
3. Понять Stax
Stax (JSR 173) является еще одним API для обработки документов XML в JDK1.6.0 в дополнение к DOM и SAX.
Происхождение Stax: есть два способа обработки XML -документов в JAXP1.3 (JSR 206): DOM (модель объекта документа) и SAX (простой API для XML).
Поскольку JAXB2 (JSR 222) и JAX-WS 2.0 (JSR 224) в JDK1.6.0 Используйте Stax, Sun решил добавить Stax в семейство JAXP и обновить версию JAXP до 1.4 (JAXP1.4 является версией обслуживания JAXP1.3). Версия JAXP в JDK1.6 составляет 1.4. Stax является потоковым API для аббревиатуры XML, API, который использует документы XML-обработки. Stax предоставляет API на основе итератора события, чтобы программисты контролировали процесс анализа документа XML. Программа пересекает итератор этого события, чтобы обработать каждое событие анализа. Событие анализа можно рассматривать как программу, то есть программу побуждает анализатор сгенерировать событие анализа, а затем обрабатывает событие, а затем заставляет анализатор генерировать следующее событие анализа. Этот цикл до тех пор, пока не встречается символ, конечный символ документа. Sax также обрабатывает XML -документы на основе событий, но использует режим Push для анализа. После того, как анализатор проанализирует полный документ XML, он только генерирует события анализа, а затем подталкивает их к программе для обработки этих событий. Дом принимает метод для сопоставления всего документа XML в дерево памяти, чтобы можно легко получить данные родительского узла, детского узла и братских узлов, но если документ велик, он будет серьезно повлиять на производительность.
4. Используйте API компилятора
Теперь мы можем использовать API компилятора JDK1.6 (JSR 199) для динамической компиляции исходных файлов Java. API компилятора объединяет функцию отражения для достижения динамического генерации кода Java и компиляции и выполнения этих кодов, что является немного динамической языковой функцией.
Эта функция очень полезна для некоторых приложений, которые требуют динамического компиляции, таких как веб -сервер JSP. Когда мы вручную модифицируем JSP, мы не хотим перезагрузить веб -сервер, чтобы увидеть эффект. В настоящее время мы можем использовать API компилятора для реализации динамического компиляции файлов JSP. Конечно, текущий веб -сервер JSP также поддерживает горячее развертывание JSP. Текущий веб -сервер JSP вызывает Javac через Runtime.exec или ProcessBuilder для компиляции кода во время работы. Этот метод требует, чтобы мы создали еще один процесс для выполнения компиляции, который не является достаточно элегантным и легко заставить код зависеть от конкретной операционной системы. Компилятор API обеспечивает более богатый способ сделать динамический компиляцию с помощью набора простых в использовании стандартных API, и он является кроссплатформенным.
5. Легкий HTTP Server API
JDK1.6 предоставляет простой API HTTP Server. Согласно этому, мы можем создать наш собственный встроенный HTTP -сервер, который поддерживает протоколы HTTP и HTTPS и предоставляет часть реализации HTTP1.1. Часть, которая не реализована, может быть реализована путем расширения существующего API HTTP Server. Программисты должны самостоятельно реализовать интерфейс Httphandler. Httpserver вызовет метод обратного вызова класса реализации Httphandler для обработки запросов клиентов. Здесь мы называем HTTP -запрос и его ответ обменом, который охвачен в класс httpexchange. Httpserver отвечает за передачу httpexchange в метод обратного вызова класса реализации Httphandler.
6. API обработки аннотации подключаемых аннотаций (API обработки аннотаций)
API обработки аннотаций подключаемых аннотаций (JSR 269) предоставляет стандартный API для обработки аннотаций (JSR 175)
На самом деле, JSR 269 используется не только для борьбы с аннотацией. Я думаю, что более мощная функция заключается в том, что он устанавливает модель самого языка Java. Он отображает языковые элементы Java, такие как метод, пакет, конструктор, тип, переменная, перечисление, аннотацию в типы и элементы (в чем разница между ними?), Тем самым отображая семантику языка Java в объекты. Мы можем увидеть эти классы в пакете javax.lang.model. Таким образом, мы можем использовать API, предоставленный JSR 269 для создания богатой функциями среды метапрограммирования. JSR 269 использует процессор аннотации для обработки аннотации во время компиляции, а не во время работы. Аннотационный процессор эквивалентен подключающемуся компилятору, поэтому он называется обработкой аннотаций вставки. Если новый код Java генерируется, когда аннотационный процессор обрабатывает аннотацию (выполнение метода процесса), компилятор снова вызовет процессор аннотации. Если для второй обработки генерируется новый код, он будет позвонить в процессор аннотации, пока не будет сгенерировано новый код. Каждый раз, когда метод Process () выполняется, он называется «круглым», так что весь процесс обработки аннотаций можно рассматривать как круглую последовательность.
JSR 269 в основном спроектирован как API для инструментов или контейнеров. Например, мы хотим создать модульную структуру модульной тестирования на основе аннотаций (например, TestNG) для использования аннотации для определения методов испытаний, которые необходимо выполнить во время теста.
7. Используйте консоль для разработки консольных программ
JDK1.6 предоставляет класс java.io.console, специально используемый для доступа к консольным устройствам на основе символов. Если ваша программа хочет взаимодействовать с CMD под Windows или терминалом под Linux, вы можете использовать класс консоли для этого. Но мы не всегда получаем доступную консоль, независимо от того, имеет ли JVM доступную консоль, зависит от базовой платформы и того, как называется JVM. Если JVM запускается в интерактивной командной строке (например, CMD Windows), а вход и вывод не перенаправляются в другом месте, то вы можете получить доступный экземпляр консоли.
8. Поддержка языков сценариев
Такие как: Ruby, Groovy, JavaScript.
9.common Annotations
Общие аннотации первоначально были частью спецификации Java EE 5.0 (JSR 244), и теперь Sun включает в себя часть этого в Java SE 6.0.
С добавлением функции метаданных аннотаций (JSR 175) в Java SE 5.0, многие технологии Java (такие как EJB и веб -службы) будут использовать аннотация для замены файлов XML для настройки рабочего параметров (или поддержки декларативного программирования, например, EJB декларативных транзакций). Если эти технологии определяют свои собственные отации отдельно для общих целей, это, очевидно, немного дублирующей конструкции. Следовательно, полезно определить набор публичных аннотаций для других связанных технологий Java. Это может избежать дублирования конструкции, также обеспечивая последовательность различных технологий Java SE и Java EE.
Следующие перечислены 10 аннотаций общие аннотации. Исходный код, сгенерированный аннотацией, используется для маркировки сгенерированного ресурса. В соответствии с этим контейнер вводит внешние зависимости от ресурсов. Существует два метода: инъекция на основе полевых и на основе сеттера. РЕСУРСА РЕСУРСА. Введите метки множества внешних зависимостей одновременно. Контейнер внедрит все эти внешние зависимости в метод PostConstruntime. Метод работает после того, как контейнер внедряет все зависимости для выполнения работы по инициализации после инъекции зависимостей. Только один метод может быть помечен методом выполнения Post -Construct Predestroy. Перед тем, как экземпляр объекта будет удален из контейнера, метод обратного вызова, который должен быть выполнен, должен быть помечен как тип времени выполнения Predestroy Runas, чтобы пометить, какую безопасную роль выполняет метод отмеченного класса. Эта роль безопасности должна соответствовать роли контейнера в безопасности. Тип времени выполнения Rolishally, метод используется для мечения ролей безопасности, которые позволяют выполнять меченые классы или методы. Эта роль безопасности должна соответствовать роли безопасности контейнеров. Метод позволяет всем ролям выполнять помеченные классы или методы. Denyall Runtime Type. Метод не позволяет какой -либо роли выполнять помеченные классы или методы, указывая, что класс или методы не могут работать в контейнере Java EE. Тип времени выполнения Declareroles используется для определения ролей безопасности, которые могут быть проверены приложением. Обычно используется для использования IsuserInrole для проверки ролей безопасности.
Уведомление:
1. Rolishalled, разрешение и Denyall не могут быть применены к классу или молологическому, разрешению, и Denyall, помеченным на классе, будут перезаписать робовые, разрешение, Denyallrunas, Rolishald, разрешение, Denyall и Declareroles, не добавленные в Java SE, чтобы обрабатывать вышеупомянутые аннотации, которые выполняются. Java SE6.0 содержит только классы определения первых пяти аннотаций в приведенной выше таблице и не содержит двигателя для обработки этих аннотаций. Эта работа может быть выполнена с помощью API обработки аннотаций (JSR 269).
По сравнению с новыми функциями 1.6, новые функции 1.7 делают нас более взволнованными, потому что это то, чего мы с нетерпением ждали, и видимы и ощутимы.
3. Новые функции JDK1.7
1. Двоичная стоимость лица
В Java7 значение типа формирования (байт, короткий, int, long) может быть представлена бинарными типами. При использовании бинарных значений, например, OB или OB необходимо добавить:
int a = 0B01111111000_11111_00000_10101_01010_10; Short B = (короткий) 0B01100_00000_111111_0; байт c = (байт) 0b00000_0001;
2. Поддержка цифровых переменных для скользящих линий
JDK1.7 может добавить линию слайдов к переменной числовой типа.
Но есть несколько мест, которые нельзя добавить
1. начало и конец числа
2. до и после десятичной точки
3. перед F или L, например:
int num = 1234_5678_9;
float num2 = 222_33f;
Long Num3 = 123_000_111L;
3. Поддержка Switch для строки
У вас всегда был знак вопроса раньше? Почему C# доступен в Java, но нет? Ха, но Java также в порядке после JDK1.7, например:
String status = "urdestate"; switch (status) {case "ordercancel": System.out.println ("Отмена порядка"); перерыв; case "ordersuccess": System.out.println ("Подписка успешно"); перерыв; по умолчанию: System.out.println ("Статус неизвестен"); }4. Позвольте ресурсу
Try-with-resources-это декларация, которая определяет один или несколько ресурсов. Этот ресурс относится к объекту, который программа должна закрыть после его обработки. Попробуйте с ресурсами убедиться, что каждый ресурс будет закрыт после завершения обработки.
Ресурсы, которые могут использовать Try-with-resources:
Любой объект, который реализует java.lang.autoclosable interface java.io.closable.
Например:
public Static String ReadfirstlineFromFile (PATH String) Throws IOException {try (BufferedReader BR = New BufferedReader (New FileReader (path))) {return br.readline (); }}
В Java 7 и более поздних версиях BufferedReader реализует интерфейс Java.Lang.AutoClosable.
Поскольку буферист определяется в объявлении Try-with-resources, он будет автоматически отключен независимо от того, является ли оператор TRY нормальным или ненормальным. Перед Java7 вам нужно использовать наконец -то блоки, чтобы закрыть этот объект.
5. Поймайте несколько исключений и переопределите исключение с улучшенной проверкой типов
Например:
public static void First () {try {BufferedReader Reader = new BufferedReader (new FileReader ("" ")); Соединение con = null; Утверждение stmt = con.createStatement (); } catch (ioException | sqlexception e) {// поймать несколько исключений, e - конечный тип e.printstacktrace (); }}Преимущества: использование одного улова для обработки нескольких исключений меньше и эффективнее, чем использование нескольких уловов для обработки одного исключения из байт -кода, сгенерированного путем обработки одного исключения.
6. Тип вывода при создании дженериков
Пока компилятор может вывести параметры типа из контекста, вы можете заменить общие параметры на пару пустых угловых кронштейнов <>. Эта пара кронштейнов в частном порядке называется бриллиантами. Перед Java SE 7 вы должны сделать это при объявлении общего объекта
List <string> list = new ArrayList <string> ();
А после Java SE7 вы можете сделать это
List <string> list = new ArrayList <> ();
Поскольку компилятор может вывести параметры типа из предыдущего (список), вы больше не можете писать общие параметры после последующего массива, просто используйте пару пустых угловых кронштейнов. Конечно, вы должны нести «алмаз» <>, иначе будет предупреждение.
Java SE7 поддерживает только вывод с ограниченным типом: вы можете использовать только вывод типа, если параметризованный тип конструктора значительно объявлен в контексте, в противном случае он не будет работать.
List <string> list = new ArrayList <> (); list.add ("a"); // это не работает list.addall (new ArrayList <> ()); // Это может быть список <? Extends String> list2 = new ArrayList <> (); list.addall (list2);
7. (нет)
8. Добавьте несколько новых инструментов и методов для получения информации об окружающей среде
Например:
File System.getUserHomedir () // Текущая файловая система каталогов пользователя. GetUserDir () // каталог, где вы находитесь при запуске файловой системы Java Process 5.getjavaiotempdir () // IO временной папки System.getJavahomedir () // JRE Установочный каталог установки
9. безопасное добавление, вычитание, умножение и деление
Например:
int math.safetoint (длинное значение) int math.safenegate (int value) long math.safesubtract (long value1, int value2) long math.safesubtract (long value1, long value2) int math.safemultiply (int value1, int value2) long math.safemultiply (long value1, int value1) long value1) Math.safenegate (Long Value) int Math.Safeadd (int value1, int value2) Long Math.Safeadd (Long Value1, Int Value2) Long Math.Safeadd (Long Value1, Long Value2) int Math.Safesubtract (int value1, int value2)
Ну, так много было разобралось до сих пор. Я добавлю это позже.
Следует отметить, что если вы не уверены в своей предыдущей версии JDK, не используйте новые функции, в противном случае могут возникнуть проблемы.