Upload
nida
View
63
Download
0
Embed Size (px)
DESCRIPTION
Новости в JDK 1.5. Светлин Наков. www.devbg.org. Съдържание. Принципи при дизайна на JDK 1.5 Нововъведения в езика Java Автоматично опаковане и разопаковане ( boxing и unboxing) Разширен синтаксис на for - циклите Изброени типове ( enumerations) Статично включване ( static import) - PowerPoint PPT Presentation
Citation preview
Новости в Новости в JDK 1.5JDK 1.5
Светлин НаковСветлин Наков
www.devbg.orgwww.devbg.org
СъдържаниеСъдържаниеСъдържаниеСъдържание
• Принципи при дизайна на Принципи при дизайна на JDK 1.5JDK 1.5• Нововъведения в езика Нововъведения в езика JavaJava• Автоматично опаковане и разопаковане Автоматично опаковане и разопаковане
((boxing boxing и и unboxing)unboxing)• Разширен синтаксис на Разширен синтаксис на forfor--циклитециклите• Изброени типове (Изброени типове (enumerations)enumerations)• Статично включване (Статично включване (static import)static import)• Методи с променлив брой аргументиМетоди с променлив брой аргументи• Ковариантност на връщания типКовариантност на връщания тип• Шаблонни типове (Шаблонни типове (generics)generics)• Метаданни в кода (Метаданни в кода (annotations)annotations)
• Принципи при дизайна на Принципи при дизайна на JDK 1.5JDK 1.5• Нововъведения в езика Нововъведения в езика JavaJava• Автоматично опаковане и разопаковане Автоматично опаковане и разопаковане
((boxing boxing и и unboxing)unboxing)• Разширен синтаксис на Разширен синтаксис на forfor--циклитециклите• Изброени типове (Изброени типове (enumerations)enumerations)• Статично включване (Статично включване (static import)static import)• Методи с променлив брой аргументиМетоди с променлив брой аргументи• Ковариантност на връщания типКовариантност на връщания тип• Шаблонни типове (Шаблонни типове (generics)generics)• Метаданни в кода (Метаданни в кода (annotations)annotations)
СъдържаниеСъдържаниеСъдържаниеСъдържание
• Разширения на стандартните библиотекиРазширения на стандартните библиотеки• Класът Класът StringBuilderStringBuilder• Класовете Класовете FormatterFormatter и и ScannerScanner• Нови контейнер-класове: Нови контейнер-класове: QueueQueue, , StackStack, , PriorityQueuePriorityQueue, , ConcurentQueueConcurentQueue
• НовНовo APIo API за конкурентно програмиране за конкурентно програмиране• Динамични стъбове за RMIДинамични стъбове за RMI• Новости в Новости в JDBC – New Row SetsJDBC – New Row Sets• Monitoring & Manageability Monitoring & Manageability API (JMX)API (JMX)• Новости в Новости в XMLXML библиотеките библиотеките
• Подобрения във виртуалната машинаПодобрения във виртуалната машина
• Разширения на стандартните библиотекиРазширения на стандартните библиотеки• Класът Класът StringBuilderStringBuilder• Класовете Класовете FormatterFormatter и и ScannerScanner• Нови контейнер-класове: Нови контейнер-класове: QueueQueue, , StackStack, , PriorityQueuePriorityQueue, , ConcurentQueueConcurentQueue
• НовНовo APIo API за конкурентно програмиране за конкурентно програмиране• Динамични стъбове за RMIДинамични стъбове за RMI• Новости в Новости в JDBC – New Row SetsJDBC – New Row Sets• Monitoring & Manageability Monitoring & Manageability API (JMX)API (JMX)• Новости в Новости в XMLXML библиотеките библиотеките
• Подобрения във виртуалната машинаПодобрения във виртуалната машина
История на езика История на езика JavaJavaИстория на езика История на езика JavaJava
• 1995 (1.0) – Java 1995 (1.0) – Java се появява за първи пътсе появява за първи път
• 1997 (1.1) – 1997 (1.1) – Добавени са вложени класовеДобавени са вложени класове
• 2001 (1.4) – 2001 (1.4) – Добавени са Добавени са assertionsassertions
• 2004 (1.5) – 2004 (1.5) – Значителни промени в Значителни промени в синтаксиса на езика – синтаксиса на езика – enums, generics, enums, generics, annotations, …annotations, …
• Излиза официално в края на август 2004Излиза официално в края на август 2004
• Рекламира се още като Рекламира се още като Java 5Java 5 PlatformPlatform
• P.S. P.S. Ако някой твърди, че има 10 години Ако някой твърди, че има 10 години опит с опит с Java, Java, не му вярвайте!не му вярвайте!
• 1995 (1.0) – Java 1995 (1.0) – Java се появява за първи пътсе появява за първи път
• 1997 (1.1) – 1997 (1.1) – Добавени са вложени класовеДобавени са вложени класове
• 2001 (1.4) – 2001 (1.4) – Добавени са Добавени са assertionsassertions
• 2004 (1.5) – 2004 (1.5) – Значителни промени в Значителни промени в синтаксиса на езика – синтаксиса на езика – enums, generics, enums, generics, annotations, …annotations, …
• Излиза официално в края на август 2004Излиза официално в края на август 2004
• Рекламира се още като Рекламира се още като Java 5Java 5 PlatformPlatform
• P.S. P.S. Ако някой твърди, че има 10 години Ако някой твърди, че има 10 години опит с опит с Java, Java, не му вярвайте!не му вярвайте!
Принципи, залегнали в Принципи, залегнали в JDK 1.5JDK 1.5Принципи, залегнали в Принципи, залегнали в JDK 1.5JDK 1.5
• Улесняване на разработчикаУлесняване на разработчика
• Спестяване писането на досаден кодСпестяване писането на досаден код
• Подобряване производителносттаПодобряване производителността
• Максимална съвместимост с Максимална съвместимост с предходните версиипредходните версии
• Улесняване на разработчикаУлесняване на разработчика
• Спестяване писането на досаден кодСпестяване писането на досаден код
• Подобряване производителносттаПодобряване производителността
• Максимална съвместимост с Максимална съвместимост с предходните версиипредходните версии
Auto boxing/unboxingAuto boxing/unboxingAuto boxing/unboxingAuto boxing/unboxing
• Автоматичното опаковане и разопаковане Автоматичното опаковане и разопаковане (boxing/unboxing) (boxing/unboxing) на примитивните типове на примитивните типове спестява писане на досаден кодспестява писане на досаден код
• Boxing = Boxing = примитивен примитивен wrapper class, wrapper class, например например intint Integer Integer
• Unboxing = wrapper classUnboxing = wrapper class примитивен примитивен, , например например Long Long long long
• Автоматичното опаковане и разопаковане Автоматичното опаковане и разопаковане (boxing/unboxing) (boxing/unboxing) на примитивните типове на примитивните типове спестява писане на досаден кодспестява писане на досаден код
• Boxing = Boxing = примитивен примитивен wrapper class, wrapper class, например например intint Integer Integer
• Unboxing = wrapper classUnboxing = wrapper class примитивен примитивен, , например например Long Long long long
ArrayList list = new ArrayList();ArrayList list = new ArrayList();list.add(5); list.add(5); // auto boxing: int --> Integer// auto boxing: int --> Integer
Integer i = (Integer) list.get(0); Integer i = (Integer) list.get(0); int i2 = i; int i2 = i; // auto unboxing: Integer --> int// auto unboxing: Integer --> int
Разширение на Разширение на forfor--циклитециклитеРазширение на Разширение на forfor--циклитециклите
• Стандартният оператор за Стандартният оператор за forfor--цикъл има цикъл има разширен синтаксис за обхождане на разширен синтаксис за обхождане на колекции и масиви:колекции и масиви:
• Стандартният оператор за Стандартният оператор за forfor--цикъл има цикъл има разширен синтаксис за обхождане на разширен синтаксис за обхождане на колекции и масиви:колекции и масиви:
Person[] persons = new Person[] {Person[] persons = new Person[] { new Person("Бай Иван"),new Person("Бай Иван"), new Person("Цар Киро"),new Person("Цар Киро"), new Person("Баба Яга")new Person("Баба Яга")};};
for (Person p : persons) {for (Person p : persons) { System.out.println(p);System.out.println(p);}}
Разширение на Разширение на forfor--циклитециклитеРазширение на Разширение на forfor--циклитециклите
• При обхождане на колекции все още При обхождане на колекции все още трябва да се преобразуват типовете:трябва да се преобразуват типовете:
• По-нататък ще видим как този проблем се По-нататък ще видим как този проблем се решава чрез шаблони (решава чрез шаблони (genericsgenerics))
• При обхождане на колекции все още При обхождане на колекции все още трябва да се преобразуват типовете:трябва да се преобразуват типовете:
• По-нататък ще видим как този проблем се По-нататък ще видим как този проблем се решава чрез шаблони (решава чрез шаблони (genericsgenerics))
ArrayList personsList = new ArrayList();ArrayList personsList = new ArrayList();
personsList.add(new Person("Бай Иван"));personsList.add(new Person("Бай Иван"));personsList.add(new Person("Цар Киро"));personsList.add(new Person("Цар Киро"));personsList.add(new Person("Баба Яга"));personsList.add(new Person("Баба Яга"));
for (Object obj : personsList) {for (Object obj : personsList) { Person person = (Person) obj;Person person = (Person) obj; System.out.println(person);System.out.println(person);}}
Изброени типовеИзброени типове (enums) (enums)Изброени типовеИзброени типове (enums) (enums)
• Изброени типовеИзброени типове (enums (enums) в JDK 1.5) в JDK 1.5
• силно типизиранисилно типизирани
• приемат стойности само измежду приемат стойности само измежду предварително дефинирано множествопредварително дефинирано множество
• компилират се до класове, наследници на компилират се до класове, наследници на java.lang.Enumjava.lang.Enum
• сериализируемисериализируеми
• Изброени типовеИзброени типове (enums (enums) в JDK 1.5) в JDK 1.5
• силно типизиранисилно типизирани
• приемат стойности само измежду приемат стойности само измежду предварително дефинирано множествопредварително дефинирано множество
• компилират се до класове, наследници на компилират се до класове, наследници на java.lang.Enumjava.lang.Enum
• сериализируемисериализируеми
public enum Color {public enum Color { WHITE, RED, GREEN, BLUE, BLACKWHITE, RED, GREEN, BLUE, BLACK}}
Изброени типовеИзброени типове (enums) (enums)Изброени типовеИзброени типове (enums) (enums)
switch (color) {switch (color) { case WHITE: case WHITE: System.out.println("бяло"); System.out.println("бяло"); break;break; case RED: case RED: System.out.println("червено"); System.out.println("червено"); break;break; ......}}
if (color == Color.RED) {if (color == Color.RED) { ......}}
• Позволени са операторите Позволени са операторите ifif и и switchswitch::• Позволени са операторите Позволени са операторите ifif и и switchswitch::
Изброени типовеИзброени типове (enums) (enums)Изброени типовеИзброени типове (enums) (enums)
public static void main(String[] args) {public static void main(String[] args) { Color color = Color.RED;Color color = Color.RED; System.out.println("color = " + color);System.out.println("color = " + color);
int value = color.ordinal();int value = color.ordinal(); System.out.println("value = " + value);System.out.println("value = " + value);
for(Color c : Color.values()) {for(Color c : Color.values()) { System.out.println("Color." + c +System.out.println("Color." + c + " = " + c.ordinal());" = " + c.ordinal()); }}}}
• Дефинирани са стандартни методи Дефинирани са стандартни методи ordinal()ordinal() ии values()values()::
• Дефинирани са стандартни методи Дефинирани са стандартни методи ordinal()ordinal() ии values()values()::
Статично включванеСтатично включванеСтатично включванеСтатично включване
• Статичното включване на клас (Статичното включване на клас (static static import)import) позволява директно използване позволява директно използване на неговите членове:на неговите членове:
• Статичното включване на клас (Статичното включване на клас (static static import)import) позволява директно използване позволява директно използване на неговите членове:на неговите членове:
import static java.lang.Math.*;import static java.lang.Math.*;
public static void main(String[] args) {public static void main(String[] args) { // Пишем директно PI, а не Math.PI// Пишем директно PI, а не Math.PI
// и // и sin(PI/2), sin(PI/2), а не а не Math.sin(Math.PI/2)Math.sin(Math.PI/2)
System.out.println(System.out.println( "PI = " + PI + "PI = " + PI + ", sin(PI/2) = " + sin(PI/2)", sin(PI/2) = " + sin(PI/2) ););}}
Променлив брой аргументиПроменлив брой аргументиПроменлив брой аргументиПроменлив брой аргументи
• Вече можем да дефинираме методи с Вече можем да дефинираме методи с променлив брой аргументи:променлив брой аргументи:
• Вече можем да дефинираме методи с Вече можем да дефинираме методи с променлив брой аргументи:променлив брой аргументи:
double average(double ... aValues) {double average(double ... aValues) { double sum = 0;double sum = 0; for (double value : aValues) {for (double value : aValues) { sum = sum + value;sum = sum + value; }} double avg = sum / aValues.length;double avg = sum / aValues.length; return avg;return avg;}}
System.out.println(average(5,6));System.out.println(average(5,6));System.out.println(average(1,2,3,4,5));System.out.println(average(1,2,3,4,5));
Ковариантност на връщания типКовариантност на връщания типКовариантност на връщания типКовариантност на връщания тип
• При имплементация на интерфейси При имплементация на интерфейси методите могат да връщат вместо типа, методите могат да връщат вместо типа, обявен в интерфейса, негов наследник:обявен в интерфейса, негов наследник:
• При имплементация на интерфейси При имплементация на интерфейси методите могат да връщат вместо типа, методите могат да връщат вместо типа, обявен в интерфейса, негов наследник:обявен в интерфейса, негов наследник:
interface SomeInterface {interface SomeInterface { public Object someMethod();public Object someMethod();}}
public class Cpublic class C implements SomeInterfaceimplements SomeInterface {{ public String someMethod() {public String someMethod() { return "I return Stringreturn "I return String " + " + ""instead of Object";instead of Object"; }}}}
Шаблонни типовеШаблонни типовеШаблонни типовеШаблонни типове
• Шаблонните типове (Шаблонните типове (generics)generics) служат за служат за дефиниране на параметризирани класоведефиниране на параметризирани класове
• Параметрите се дефинират се с ъглови Параметрите се дефинират се с ъглови скоби, като в скоби, като в C++. C++. Например:Например:
• Шаблонните типове (Шаблонните типове (generics)generics) служат за служат за дефиниране на параметризирани класоведефиниране на параметризирани класове
• Параметрите се дефинират се с ъглови Параметрите се дефинират се с ъглови скоби, като в скоби, като в C++. C++. Например:Например:
public class Example<T> {public class Example<T> { private T mValue;private T mValue;
public Example<T>(T aValue) {public Example<T>(T aValue) { mValue = aValue;mValue = aValue; }}
public T getValue() {public T getValue() { return mValue;return mValue; }}}}
Шаблонни типовеШаблонни типовеШаблонни типовеШаблонни типове
• При деклариране на променлива от При деклариране на променлива от шаблонен тип се задават параметрите:шаблонен тип се задават параметрите:
• Допуска се инстанциране само по класДопуска се инстанциране само по клас ((не може по примитивен типне може по примитивен тип))
• ДекларациятаДекларацията Example<int>Example<int> е невалидна е невалидна
• При деклариране на променлива от При деклариране на променлива от шаблонен тип се задават параметрите:шаблонен тип се задават параметрите:
• Допуска се инстанциране само по класДопуска се инстанциране само по клас ((не може по примитивен типне може по примитивен тип))
• ДекларациятаДекларацията Example<int>Example<int> е невалидна е невалидна
Example<String> str = new Example<String>(Example<String> str = new Example<String>( "Шаблони, маблони, "Шаблони, маблони, макарони и купонимакарони и купони");");System.out.println(str.getValue());System.out.println(str.getValue());
Example<Example<DoubleDouble> > dd = = new Example<new Example<DoubleDouble>(>(3.141592653.14159265););System.out.println(System.out.println(dd.getValue());.getValue());
Шаблонни типовеШаблонни типовеШаблонни типовеШаблонни типове
• Каква е ползата от шаблонните типове?Каква е ползата от шаблонните типове?• Подобряване на четимостта на кодаПодобряване на четимостта на кода• Осигуряване на типова безопасностОсигуряване на типова безопасност
• Къде се използват?Къде се използват?• Най-вече колекции Най-вече колекции – – VectorVector, , ArrayListArrayList, , HashtableHashtable, , HashMapHashMap, …, …
• Как са реализирани?Как са реализирани?• На ниво компилатор е добавена проверка На ниво компилатор е добавена проверка
за съответствието на типоветеза съответствието на типовете• Параметрите се представят вътрешно Параметрите се представят вътрешно
като като ObjectObject и не съществуват по време и не съществуват по време на изпълнениена изпълнение
• Каква е ползата от шаблонните типове?Каква е ползата от шаблонните типове?• Подобряване на четимостта на кодаПодобряване на четимостта на кода• Осигуряване на типова безопасностОсигуряване на типова безопасност
• Къде се използват?Къде се използват?• Най-вече колекции Най-вече колекции – – VectorVector, , ArrayListArrayList, , HashtableHashtable, , HashMapHashMap, …, …
• Как са реализирани?Как са реализирани?• На ниво компилатор е добавена проверка На ниво компилатор е добавена проверка
за съответствието на типоветеза съответствието на типовете• Параметрите се представят вътрешно Параметрите се представят вътрешно
като като ObjectObject и не съществуват по време и не съществуват по време на изпълнениена изпълнение
Шаблонни колекцииШаблонни колекцииШаблонни колекцииШаблонни колекции
• Всички стандартни колекции в Всички стандартни колекции в JDKJDK 1.5 1.5 вече са шаблонни:вече са шаблонни:
• Всички стандартни колекции в Всички стандартни колекции в JDKJDK 1.5 1.5 вече са шаблонни:вече са шаблонни:
import java.util.*;import java.util.*;
ArrayList<Integer> list =ArrayList<Integer> list = new ArrayList<Integer>();new ArrayList<Integer>();list.add(5);list.add(5);int value = list.get(0);int value = list.get(0);
HashMap<String, Integer> ageMap =HashMap<String, Integer> ageMap = new HashMap<String, Integer>();new HashMap<String, Integer>();ageMap.put("Бай Киро", 83);ageMap.put("Бай Киро", 83);int kiroAge = ageMap.get("Бай Киро");int kiroAge = ageMap.get("Бай Киро");
Шаблонни колекцииШаблонни колекцииШаблонни колекцииШаблонни колекции
• Шаблонните колекции могат да се Шаблонните колекции могат да се обхождат директно с новия синтаксис за обхождат директно с новия синтаксис за forfor--цикъл:цикъл:
• Шаблонните колекции могат да се Шаблонните колекции могат да се обхождат директно с новия синтаксис за обхождат директно с новия синтаксис за forfor--цикъл:цикъл:
ArrayListArrayList<Person><Person> personsList = personsList = new ArrayListnew ArrayList<Person><Person>();();
personsList.add(new Person("Бай Иван"));personsList.add(new Person("Бай Иван"));personsList.add(new Person("Цар Киро"));personsList.add(new Person("Цар Киро"));personsList.add(new Person("Баба Яга"));personsList.add(new Person("Баба Яга"));
for (for (PersonPerson personperson : personsList) { : personsList) { System.out.println(person);System.out.println(person);}}
• Възможно е ограничаване на типа на Възможно е ограничаване на типа на параметрите на шаблонен клас:параметрите на шаблонен клас:
• Възможно е ограничаване на типа на Възможно е ограничаване на типа на параметрите на шаблонен клас:параметрите на шаблонен клас:
Шаблонни типовеШаблонни типовеШаблонни типовеШаблонни типове
class Example<T extends Person> { ...}
class Example2<T extends Shape & Movable, Transformable> { ...}
void fill(List<? extends Shape> aList) { ...}
Шаблонни методиШаблонни методиШаблонни методиШаблонни методи
• Методите също могат да бъдат Методите също могат да бъдат шаблонни, независимо от класовете:шаблонни, независимо от класовете:
• Методите също могат да бъдат Методите също могат да бъдат шаблонни, независимо от класовете:шаблонни, независимо от класовете:
static <T> void swap(T[] arr, int index1, int index2) { T temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp;}
public static void main(String[] args) { Integer[] intArray = {10, 20, 30, 40}; swap(intArray, 1, 3);}
ДемонстрацияДемонстрацияДемонстрацияДемонстрация
Използване на шаблонниИзползване на шаблоннитипове (типове (generics)generics)
Използване на шаблонниИзползване на шаблоннитипове (типове (generics)generics)
АнотацииАнотацииАнотацииАнотации
• Анотациите позволяват прикрепяне на Анотациите позволяват прикрепяне на метаданни към декларациите в кода метаданни към декларациите в кода (класове(класове,, методи, член-променливи, ...) методи, член-променливи, ...)
• Много приличат на атрибутите в Много приличат на атрибутите в .NET.NET
• Задават се с Задават се с @S@SomeomeAAnnotationnnotation
• Не променят семантиката на програматаНе променят семантиката на програмата
• Обработват се от инструменти, които ги Обработват се от инструменти, които ги разпознаватразпознават
• Могат да приемат параметриМогат да приемат параметри
• Могат да се дефинират от програмистаМогат да се дефинират от програмиста
• Анотациите позволяват прикрепяне на Анотациите позволяват прикрепяне на метаданни към декларациите в кода метаданни към декларациите в кода (класове(класове,, методи, член-променливи, ...) методи, член-променливи, ...)
• Много приличат на атрибутите в Много приличат на атрибутите в .NET.NET
• Задават се с Задават се с @S@SomeomeAAnnotationnnotation
• Не променят семантиката на програматаНе променят семантиката на програмата
• Обработват се от инструменти, които ги Обработват се от инструменти, които ги разпознаватразпознават
• Могат да приемат параметриМогат да приемат параметри
• Могат да се дефинират от програмистаМогат да се дефинират от програмиста
АнотацииАнотацииАнотацииАнотации
• Декларация на интерфейс за анотации:Декларация на интерфейс за анотации:• Декларация на интерфейс за анотации:Декларация на интерфейс за анотации:
@Retention(RetentionPolicy.RUNTIME)@interface Author { String name();}
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@interface Optimize { String level() default "release"; boolean threadSafe(); String lastCheckDate(); // java.util.Date not allowed!}
АнотацииАнотацииАнотацииАнотации
• Използване на анотации в кода:Използване на анотации в кода:• Използване на анотации в кода:Използване на анотации в кода:
@Author(name="Svetlin Nakov")
public class AnnotDemo {
@Optimize(level="debug", threadSafe=false, lastCheckDate="20.07.2004")
public void test() { ... }
}
АнотацииАнотацииАнотацииАнотации
• Анотациите са наследници на Анотациите са наследници на java.lang.anotation.Anotationjava.lang.anotation.Anotation
• Могат да се извличат чрез Могат да се извличат чрез reflection:reflection:
• Анотациите са наследници на Анотациите са наследници на java.lang.anotation.Anotationjava.lang.anotation.Anotation
• Могат да се извличат чрез Могат да се извличат чрез reflection:reflection:
import java.lang.annotation.*;
Annotation classAnnot = AnnotDemo.class. getAnnotation(Author.class);System.out.println("AnnotDemo class " + "has annotation: " + classAnnot);
Author classAuthor = (Author) classAnnot;System.out.println("AnnotDemo has " + "author: " + classAuthor.name());
АнотацииАнотацииАнотацииАнотации
• Анотациите постепенно ще заместват Анотациите постепенно ще заместват външните външните XML XML конфигурационни конфигурационни файлове, масово използвани в файлове, масово използвани в J2EEJ2EE
• Анотациите постепенно ще заместват Анотациите постепенно ще заместват външните външните XML XML конфигурационни конфигурационни файлове, масово използвани в файлове, масово използвани в J2EEJ2EE
// EJB 3.0 session bean
@Session public class SampleSessionBean {
private DataSource customerDB;
@Inject private void setCustomerDB( DataSource customerDB) { this.customerDB = customerDB; }
...}
ДемонстрацияДемонстрацияДемонстрацияДемонстрация
Използване на анотацииИзползване на анотацииИзползване на анотацииИзползване на анотации
Нови класовеНови класове в в JDK 1.5JDK 1.5Нови класовеНови класове в в JDK 1.5JDK 1.5
• Разширения на стандартните библиотекиРазширения на стандартните библиотеки• Клас Клас java.lang.StringBuilderjava.lang.StringBuilder – като – като StringBufferStringBuffer, но не е синхронизиран (и , но не е синхронизиран (и съответно е по-бърз)съответно е по-бърз)
• Клас Клас java.util.Formatterjava.util.Formatter – за – за форматиране, подобно на форматиране, подобно на sprintf()sprintf() в C в C
• Клас Клас java.util.Scannerjava.util.Scanner – за – за форматиран вход от потоци и файловеформатиран вход от потоци и файлове
• Класът Класът java.io.PrintStreamjava.io.PrintStream има метод има метод printf()printf() за форматиран изход за форматиран изход
• Нови колекции в Нови колекции в java.utiljava.util – – QueueQueue, , StackStack, , PriorityQueuePriorityQueue
• Разширения на стандартните библиотекиРазширения на стандартните библиотеки• Клас Клас java.lang.StringBuilderjava.lang.StringBuilder – като – като StringBufferStringBuffer, но не е синхронизиран (и , но не е синхронизиран (и съответно е по-бърз)съответно е по-бърз)
• Клас Клас java.util.Formatterjava.util.Formatter – за – за форматиране, подобно на форматиране, подобно на sprintf()sprintf() в C в C
• Клас Клас java.util.Scannerjava.util.Scanner – за – за форматиран вход от потоци и файловеформатиран вход от потоци и файлове
• Класът Класът java.io.PrintStreamjava.io.PrintStream има метод има метод printf()printf() за форматиран изход за форматиран изход
• Нови колекции в Нови колекции в java.utiljava.util – – QueueQueue, , StackStack, , PriorityQueuePriorityQueue
Форматиран вход/изходФорматиран вход/изходФорматиран вход/изходФорматиран вход/изход
Date now = new java.util.Date();System.out.printf("Today is " + "%1$te.%1$tm.%1$tY", now);
String name = "Svetlin Nakov";int count = 15;System.out.printf("Welcome, %1$s. You " + "are visitior %2$d.\n", name, count);
Scanner sc = new Scanner(System.in);int value = sc.nextInt();System.out.printf("value = %1$d", value);
Конкурентно програмиранеКонкурентно програмиранеКонкурентно програмиранеКонкурентно програмиране
• Новото API за конкурентно програмиране Новото API за конкурентно програмиране ((java.util.concurrentjava.util.concurrent) предоставя:) предоставя:
• Executors, Thread pools, CallablesExecutors, Thread pools, Callables
• BlockingQueueBlockingQueue, , ConcurrentHashMapConcurrentHashMap
• Locks – (Locks – (ReentrantLockReentrantLock, , ReadWriteLockReadWriteLock) ) – – lock()lock(), , unlock()unlock(), , tryLock()tryLock()
• ConditionsConditions – – await()await(), , signal()signal()
• Атомарни променливи – Атомарни променливи – AtomicBooleanAtomicBoolean, , AtomicIntegerAtomicInteger, , AtomicReferenceAtomicReference – – incrementAndGet()incrementAndGet(), , getAndSet(getAndSet(……)), , compareAndSet(compareAndSet(……))
• Новото API за конкурентно програмиране Новото API за конкурентно програмиране ((java.util.concurrentjava.util.concurrent) предоставя:) предоставя:
• Executors, Thread pools, CallablesExecutors, Thread pools, Callables
• BlockingQueueBlockingQueue, , ConcurrentHashMapConcurrentHashMap
• Locks – (Locks – (ReentrantLockReentrantLock, , ReadWriteLockReadWriteLock) ) – – lock()lock(), , unlock()unlock(), , tryLock()tryLock()
• ConditionsConditions – – await()await(), , signal()signal()
• Атомарни променливи – Атомарни променливи – AtomicBooleanAtomicBoolean, , AtomicIntegerAtomicInteger, , AtomicReferenceAtomicReference – – incrementAndGet()incrementAndGet(), , getAndSet(getAndSet(……)), , compareAndSet(compareAndSet(……))
ExecutorsExecutorsExecutorsExecutors
• Изпълнителите (Изпълнителите (executors)executors) са обекти, са обекти, които изпълняват задачикоито изпълняват задачи
• Могат да стартират задачите синхронно Могат да стартират задачите синхронно или асинхронно:или асинхронно:
• в текущата нишка (в текущата нишка (threadthread))
• в отделни нишки (в отделни нишки (threads)threads)
• в в thread poolsthread pools
• ограничени или неограничениограничени или неограничени
• последователно една след другапоследователно една след друга
• на определено времена определено време
• Изпълнителите (Изпълнителите (executors)executors) са обекти, са обекти, които изпълняват задачикоито изпълняват задачи
• Могат да стартират задачите синхронно Могат да стартират задачите синхронно или асинхронно:или асинхронно:
• в текущата нишка (в текущата нишка (threadthread))
• в отделни нишки (в отделни нишки (threads)threads)
• в в thread poolsthread pools
• ограничени или неограничениограничени или неограничени
• последователно една след другапоследователно една след друга
• на определено времена определено време
ExecutorsExecutorsExecutorsExecutors
• Класът Класът java.util.concurrent.Executorsjava.util.concurrent.Executors има методи за създаване на различни има методи за създаване на различни изпълнители (executors)изпълнители (executors)• newSingleThreadExecutor() – опашка
със задачи – изпълняват се една по една по реда на постъпване
• newFixedThreadPool(int x) – thread pool с x работни нишки – изпълнява по x задачи едновременно
• newCachedThreadPool() – класически thread pool – изпълнява всички задачи едновременно и ползва thread reuse
• Класът Класът java.util.concurrent.Executorsjava.util.concurrent.Executors има методи за създаване на различни има методи за създаване на различни изпълнители (executors)изпълнители (executors)• newSingleThreadExecutor() – опашка
със задачи – изпълняват се една по една по реда на постъпване
• newFixedThreadPool(int x) – thread pool с x работни нишки – изпълнява по x задачи едновременно
• newCachedThreadPool() – класически thread pool – изпълнява всички задачи едновременно и ползва thread reuse
Executors – Executors – примерпримерExecutors – Executors – примерпример
// Create a thread pool with 3 worker threads
int threadsCount = 3;ExecutorService pool = Executors. newFixedThreadPool(threadsCount);
// Add some tasks to the pool
int tasksCount = 12;for (int i = 0; i < tasksCount; i++) { pool.execute(new Task("t" + (i+1)));}
// Destroy the pool after all tasks get finished
pool.shutdown();
ДемонстрацияДемонстрацияДемонстрацияДемонстрация
Използване на Използване на thread poolsthread poolsИзползване на Използване на thread poolsthread pools
Други новости в Други новости в JDK JDK 1.51.5Други новости в Други новости в JDK JDK 1.51.5
• Подобрения в RMIПодобрения в RMI
• Динамично генериране на stub класове по Динамично генериране на stub класове по време на изпълнениевреме на изпълнение
• Нови row sets в JDBCНови row sets в JDBC• JdbcRowSetJdbcRowSet, , FilteredRowSetFilteredRowSet, , JoinRowSetJoinRowSet, , CachedRowSetCachedRowSet ( (disconnected disconnected row setrow set), ), WebRowSetWebRowSet ((XML based)XML based)
• Monitoring & Manageability APIMonitoring & Manageability API
• Средства за наблюдение на виртуалната Средства за наблюдение на виртуалната машина (памет, ресурси, натоварване, ...)машина (памет, ресурси, натоварване, ...)
• JMXJMX (Java Management Extensions) (Java Management Extensions) в в JVMJVM
• Подобрения в RMIПодобрения в RMI
• Динамично генериране на stub класове по Динамично генериране на stub класове по време на изпълнениевреме на изпълнение
• Нови row sets в JDBCНови row sets в JDBC• JdbcRowSetJdbcRowSet, , FilteredRowSetFilteredRowSet, , JoinRowSetJoinRowSet, , CachedRowSetCachedRowSet ( (disconnected disconnected row setrow set), ), WebRowSetWebRowSet ((XML based)XML based)
• Monitoring & Manageability APIMonitoring & Manageability API
• Средства за наблюдение на виртуалната Средства за наблюдение на виртуалната машина (памет, ресурси, натоварване, ...)машина (памет, ресурси, натоварване, ...)
• JMXJMX (Java Management Extensions) (Java Management Extensions) в в JVMJVM
Проследяване на стекаПроследяване на стекаПроследяване на стекаПроследяване на стека
// Show current thread's stack trace
java.lang.StackTraceElement ste[] = Thread.currentThread().getStackTrace();
for (int i=0; i < ste.length; i++) { System.out.println(ste[i]);}
// Show all threads' stack traces
Map<Thread,StackTraceElement[]> allStacks = Thread.getAllStackTraces();
System.out.println(allStacks);
• Новости в XML библиотекитеНовости в XML библиотеките
• XML 1.1, SAX 2, DOM 3, XSLTXML 1.1, SAX 2, DOM 3, XSLT
• Non-blocking версия на класовете Non-blocking версия на класовете SSLSocketSSLSocket и и SSLServerSocketSSLServerSocket
• Подобрения във виртуалната машинаПодобрения във виртуалната машина
• Class Data SharingClass Data Sharing
• JVM използва memory-mapped файлове, за JVM използва memory-mapped файлове, за да ускори зареждането на големи JAR да ускори зареждането на големи JAR архивиархиви
• Общите JAR файлове се Общите JAR файлове се зареждат в обща зареждат в обща заза различните инстанции на JVM различните инстанции на JVM памет памет
• Новости в XML библиотекитеНовости в XML библиотеките
• XML 1.1, SAX 2, DOM 3, XSLTXML 1.1, SAX 2, DOM 3, XSLT
• Non-blocking версия на класовете Non-blocking версия на класовете SSLSocketSSLSocket и и SSLServerSocketSSLServerSocket
• Подобрения във виртуалната машинаПодобрения във виртуалната машина
• Class Data SharingClass Data Sharing
• JVM използва memory-mapped файлове, за JVM използва memory-mapped файлове, за да ускори зареждането на големи JAR да ускори зареждането на големи JAR архивиархиви
• Общите JAR файлове се Общите JAR файлове се зареждат в обща зареждат в обща заза различните инстанции на JVM различните инстанции на JVM памет памет
Още новости в Още новости в JDK JDK 1.51.5Още новости в Още новости в JDK JDK 1.51.5
• Подобрения в Подобрения в Desktop GUIDesktop GUI библиотеките библиотеките
• Подобрения в скоросттаПодобрения в скоростта
• Java2D може да ползва OpenGLJava2D може да ползва OpenGL
• XAWT – XAWT – Олекотена Олекотена AWTAWT библиотека за библиотека за X11 X11 терминалитерминали
• Нови Нови look-and-feel look-and-feel схемисхеми
• Подобрения в Подобрения в Desktop GUIDesktop GUI библиотеките библиотеките
• Подобрения в скоросттаПодобрения в скоростта
• Java2D може да ползва OpenGLJava2D може да ползва OpenGL
• XAWT – XAWT – Олекотена Олекотена AWTAWT библиотека за библиотека за X11 X11 терминалитерминали
• Нови Нови look-and-feel look-and-feel схемисхеми
Още новости в Още новости в JDK JDK 1.51.5Още новости в Още новости в JDK JDK 1.51.5
За повече информацияЗа повече информацияЗа повече информацияЗа повече информация
• За За downloaddownload на на JDK 1.5 beta 2JDK 1.5 beta 2::
• http://java.sun.com/j2se/1.5.0/download.jsphttp://java.sun.com/j2se/1.5.0/download.jsp
• Технически преглед:Технически преглед:
• http://java.sun.com/developer/technicalArtichttp://java.sun.com/developer/technicalArticles/releases/j2se15/les/releases/j2se15/
• New Features of J2SE 1.5 (Tiger):New Features of J2SE 1.5 (Tiger):
• http://www.javacommunity.org/conference/5http://www.javacommunity.org/conference/5th/data/2_1.pdfth/data/2_1.pdf
• Java JDK 1.5Java JDK 1.5::
• http://www.tyma.com/tymajdk15.pdfhttp://www.tyma.com/tymajdk15.pdf
• За За downloaddownload на на JDK 1.5 beta 2JDK 1.5 beta 2::
• http://java.sun.com/j2se/1.5.0/download.jsphttp://java.sun.com/j2se/1.5.0/download.jsp
• Технически преглед:Технически преглед:
• http://java.sun.com/developer/technicalArtichttp://java.sun.com/developer/technicalArticles/releases/j2se15/les/releases/j2se15/
• New Features of J2SE 1.5 (Tiger):New Features of J2SE 1.5 (Tiger):
• http://www.javacommunity.org/conference/5http://www.javacommunity.org/conference/5th/data/2_1.pdfth/data/2_1.pdf
• Java JDK 1.5Java JDK 1.5::
• http://www.tyma.com/tymajdk15.pdfhttp://www.tyma.com/tymajdk15.pdf
Новости в Новости в JDK 1.5JDK 1.5Новости в Новости в JDK 1.5JDK 1.5
Въпроси?Въпроси?Въпроси?Въпроси?