JDK 1.5 New Features

  • 2,292 views
Uploaded on

Принципи при дизайна на JDK 1.5. …

Принципи при дизайна на JDK 1.5.
Нововъведения в езика Java.
Автоматично опаковане и разопаковане (boxing и unboxing).
Разширен синтаксис на for-циклите.
Изброени типове (enumerations).
Статично включване (static import).
Методи с променлив брой аргументи.
Ковариантност на връщания тип.
Шаблонни типове (generics).
Метаданни в кода (annotations).
Разширения на стандартните библиотеки.
Класът StringBuilder.
Класовете Formatter и Scanner.
Нови контейнер-класове: Queue, Stack, PriorityQueue, ConcurentQueue.
Новo API за конкурентно програмиране.
Динамични стъбове за RMI.
Новости в JDBC – New Row Sets.
Monitoring & Manageability API (JMX).
Новости в XML библиотеките.
Подобрения във виртуалната машина.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,292
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
60
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Новости в JDK 1.5 Светлин Наков www.devbg.org
  • 2. Съдържание
    • Принципи при дизайна на JDK 1.5
    • Нововъведения в езика Java
      • Автоматично опаковане и разопаковане ( boxing и unboxing)
      • Разширен синтаксис на for - циклите
      • Изброени типове ( enumerations)
      • Статично включване ( static import)
      • Методи с променлив брой аргументи
      • Ковариантност на връщания тип
      • Шаблонни типове ( generics)
      • Метаданни в кода ( annotations)
  • 3. Съдържание
    • Разширения на стандартните библиотеки
      • Класът StringBuilder
      • Класовете Formatter и Scanner
      • Нови контейнер-класове: Queue , Stack , PriorityQueue , ConcurentQueue
      • Нов o API за конкурентно програмиране
      • Динамични стъбове за RMI
      • Новости в JDBC – New Row Sets
      • Monitoring & Manageability API (JMX)
      • Новости в XML библиотеките
    • Подобрения във виртуалната машина
  • 4. История на езика Java
    • 1995 (1.0) – Java се появява за първи път
    • 1997 (1.1) – Добавени са вложени класове
    • 2001 (1.4) – Добавени са assertions
    • 2004 (1.5) – Значителни промени в синтаксиса на езика – enums, generics, annotations, …
      • Излиза официално в края на август 2004
      • Рекламира се още като Java 5 Platform
    • P.S. Ако някой твърди, че има 10 години опит с Java, не му вярвайте!
  • 5. Принципи, залегнали в JDK 1.5
    • Улесняване на разработчика
    • Спестяване писането на досаден код
    • Подобряване производителността
    • Максимална съвместимост с предходните версии
  • 6. Auto boxing/unboxing
    • Автоматичното опаковане и разопаковане (boxing/unboxing) на примитивните типове спестява писане на досаден код
    • Boxing = примитивен  wrapper class, например int  Integer
    • Unboxing = wrapper class  примитивен , например Long  long
    ArrayList list = new ArrayList(); list.add(5); // auto boxing: int --> Integer Integer i = (Integer) list.get(0); int i2 = i; // auto unboxing: Integer --> int
  • 7. Разширение на for - циклите
    • Стандартният оператор за for - цикъл има разширен синтаксис за обхождане на колекции и масиви:
    Person[] persons = new Person[] { new Person("Бай Иван"), new Person("Цар Киро"), new Person("Баба Яга") }; for (Person p : persons) { System.out.println(p); }
  • 8. Разширение на for - циклите
    • При обхождане на колекции все още трябва да се преобразуват типовете:
    • По-нататък ще видим как този проблем се решава чрез шаблони ( generics )
    ArrayList personsList = new ArrayList(); personsList.add(new Person("Бай Иван")); personsList.add(new Person("Цар Киро")); personsList.add(new Person("Баба Яга")); for (Object obj : personsList) { Person person = (Person) obj; System.out.println(person); }
  • 9. Изброени типове (enums)
    • Изброени типове (enums ) в JDK 1.5
      • силно типизирани
      • приемат стойности само измежду предварително дефинирано множество
      • компилират се до класове, наследници на java.lang.Enum
      • сериализируеми
    public enum Color { WHITE, RED, GREEN, BLUE, BLACK }
  • 10. Изброени типове (enums)
    • Позволени са операторите if и switch :
    switch (color) { case WHITE: System.out.println("бяло"); break; case RED: System.out.println("червено"); break; ... } if (color == Color.RED) { ... }
  • 11. Изброени типове (enums)
    • Дефинирани са стандартни методи ordinal() и values() :
    public static void main(String[] args) { Color color = Color.RED; System.out.println("color = " + color); int value = color.ordinal(); System.out.println("value = " + value); for(Color c : Color.values()) { System.out.println("Color." + c + " = " + c.ordinal()); } }
  • 12. Статично включване
    • Статичното включване на клас ( static import) позволява директно използване на неговите членове:
    import static java.lang.Math.*; public static void main(String[] args) { // Пишем директно PI, а не Math.PI // и sin(PI/2), а не Math.sin(Math.PI/2) System.out.println( "PI = " + PI + ", sin(PI/2) = " + sin(PI/2) ); }
  • 13. Променлив брой аргументи
    • Вече можем да дефинираме методи с променлив брой аргументи:
    double average(double ... aValues) { double sum = 0; for (double value : aValues) { sum = sum + value; } double avg = sum / aValues.length; return avg; } System.out.println(average(5,6)); System.out.println(average(1,2,3,4,5));
  • 14. Ковариантност на връщания тип
    • При имплементация на интерфейси методите могат да връщат вместо типа, обявен в интерфейса, негов наследник:
    interface SomeInterface { public Object someMethod(); } public class C implements SomeInterface { public String someMethod() { return "I return String " + " instead of Object"; } }
  • 15. Шаблонни типове
    • Шаблонните типове ( generics) служат за дефиниране на параметризирани класове
    • Параметрите се дефинират се с ъглови скоби, като в C++. Например:
    public class Example<T> { private T mValue; public Example<T>(T aValue) { mValue = aValue; } public T getValue() { return mValue; } }
  • 16. Шаблонни типове
    • При деклариране на променлива от шаблонен тип се задават параметрите:
    • Допуска се инстанциране само по клас ( не може по примитивен тип )
      • Декларацията Example<int> е невалидна
    Example<String> str = new Example<String>( &quot;Шаблони, маблони, макарони и купони &quot;); System.out.println(str.getValue()); Example< Double > d = new Example< Double >( 3.14159265 ); System.out.println( d .getValue());
  • 17. Шаблонни типове
    • Каква е ползата от шаблонните типове?
      • Подобряване на четимостта на кода
      • Осигуряване на типова безопасност
    • Къде се използват?
      • Най-вече колекции – Vector , ArrayList , Hashtable , HashMap , …
    • Как са реализирани?
      • На ниво компилатор е добавена проверка за съответствието на типовете
      • Параметрите се представят вътрешно като Object и не съществуват по време на изпълнение
  • 18. Шаблонни колекции
    • Всички стандартни колекции в JDK 1.5 вече са шаблонни:
    import java.util.*; ArrayList<Integer> list = new ArrayList<Integer>(); list.add(5); int value = list.get(0); HashMap<String, Integer> ageMap = new HashMap<String, Integer>(); ageMap.put(&quot;Бай Киро&quot;, 83); int kiroAge = ageMap.get(&quot;Бай Киро&quot;);
  • 19. Шаблонни колекции
    • Шаблонните колекции могат да се обхождат директно с новия синтаксис за for - цикъл:
    ArrayList <Person> personsList = new ArrayList <Person> (); personsList.add(new Person(&quot;Бай Иван&quot;)); personsList.add(new Person(&quot;Цар Киро&quot;)); personsList.add(new Person(&quot;Баба Яга&quot;)); for ( Person person : personsList) { System.out.println(person); }
  • 20.
    • Възможно е ограничаване на типа на параметрите на шаблонен клас:
    Шаблонни типове class Example<T extends Person> { ... } class Example2<T extends Shape & Movable, Transformable> { ... } void fill(List<? extends Shape> aList) { ... }
  • 21. Шаблонни методи
    • Методите също могат да бъдат шаблонни, независимо от класовете:
    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 ); }
  • 22. Демонстрация
    • Използване на шаблонни
    • типове ( generics)
  • 23. Анотации
    • Анотациите позволяват прикрепяне на метаданни към декларациите в кода (класове , методи, член-променливи, ...)
    • Много приличат на атрибутите в .NET
    • Задават се с @S ome A nnotation
    • Не променят семантиката на програмата
    • Обработват се от инструменти, които ги разпознават
    • Могат да приемат параметри
    • Могат да се дефинират от програмиста
  • 24. Анотации
    • Декларация на интерфейс за анотации:
    @Retention(RetentionPolicy.RUNTIME) @interface Author { String name(); } @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @interface Optimize { String level() default &quot;release&quot; ; boolean threadSafe(); String lastCheckDate(); // java.util.Date not allowed! }
  • 25. Анотации
    • Използване на анотации в кода:
    @ A uthor(name=&quot;Svetlin Nakov&quot;) public class AnnotDemo { @ O ptimize(level=&quot;debug&quot;, threadSafe=false, lastCheckDate=&quot;20.07.2004&quot;) public void test () { ... } }
  • 26. Анотации
    • Анотациите са наследници на java.lang.anotation.Anotation
    • Могат да се извличат чрез reflection:
    import java.lang.annotation.*; Annotation classAnnot = AnnotDemo.class. getAnnotation(Author.class); System.out.println(&quot;AnnotDemo class &quot; + &quot;has annotation: &quot; + classAnnot); Author classAuthor = (Author) classAnnot; System.out.println(&quot;AnnotDemo has &quot; + &quot;author: &quot; + classAuthor.name());
  • 27. Анотации
    • Анотациите постепенно ще заместват външните XML конфигурационни файлове, масово използвани в J2EE
    // EJB 3.0 session bean @Session public class Sample Session Bean { private DataSource customerDB; @Inject private void setCustomerDB( DataSource customerDB) { this.customerDB = customerDB; } ... }
  • 28. Демонстрация
    • Използване на анотации
  • 29. Нови класове в JDK 1.5
    • Разширения на стандартните библиотеки
      • Клас java.lang.StringBuilder – като StringBuffer , но не е синхронизиран (и съответно е по-бърз)
      • Клас java.util.Formatter – за форматиране, подобно на sprintf() в C
      • Клас java.util.Scanner – за форматиран вход от потоци и файлове
      • Класът java.io.PrintStream има метод printf() за форматиран изход
      • Нови колекции в java.util – Queue , Stack , PriorityQueue
  • 30. Форматиран вход/изход Date now = new java.util.Date(); System.out.printf(&quot;Today is &quot; + &quot;%1$te.%1$tm.%1$tY&quot;, now); String name = &quot;Svetlin Nakov&quot;; int count = 15; System.out.printf(&quot;Welcome, %1$s. You &quot; + &quot;are visitior %2$d. &quot;, name, count); Scanner sc = new Scanner(System.in); int value = sc.nextInt(); System.out.printf(&quot;value = %1$d&quot;, value);
  • 31. Конкурентно програмиране
    • Новото API за конкурентно програмиране ( java.util.concurrent ) предоставя:
      • Executors, Thread pools, Callables
      • BlockingQueue , ConcurrentHashMap
      • Locks – ( ReentrantLock , ReadWriteLock ) – lock() , unlock() , tryLock()
      • Conditions – await() , signal()
      • Атомарни променливи – AtomicBoolean , AtomicInteger , AtomicReference – incrementAndGet() , getAndSet( … ) , compareAndSet( … )
  • 32. Executors
    • Изпълнителите ( executors) са обекти, които изпълняват задачи
    • Могат да стартират задачите синхронно или асинхронно:
      • в текущата нишка ( thread )
      • в отделни нишки ( threads)
      • в thread pools
        • ограничени или неограничени
      • последователно една след друга
      • на определено време
  • 33. Executors
    • Класът java.util.concurrent.Executors има методи за създаване на различни изпълнители (executors)
      • newSingleThreadExecutor() – опашка със задачи – изпълняват се една по една по реда на постъпване
      • newFixedThreadPool(int x) – thread pool с x работни нишки – изпълнява по x задачи едновременно
      • newCachedThreadPool() – класически thread pool – изпълнява всички задачи едновременно и ползва thread reuse
  • 34. 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(&quot;t&quot; + (i+1))); } // Destroy the pool after all tasks get finished pool.shutdown();
  • 35. Демонстрация
    • Използване на thread pools
  • 36. Други новости в JDK 1.5
    • Подобрения в RMI
      • Динамично генериране на stub класове по време на изпълнение
    • Нови row sets в JDBC
      • JdbcRowSet , FilteredRowSet , JoinRowSet , CachedRowSet ( disconnected row set ), WebRowSet ( XML based)
    • Monitoring & Manageability API
      • Средства за наблюдение на виртуалната машина (памет, ресурси, натоварване, ...)
      • JMX (Java Management Extensions) в JVM
  • 37. Проследяване на стека // 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);
  • 38.
    • Новости в XML библиотеките
      • XML 1.1, SAX 2, DOM 3, XSLT
    • Non-blocking версия на класовете SSLSocket и SSLServerSocket
    • Подобрения във виртуалната машина
      • Class Data Sharing
        • JVM използва memory-mapped файлове, за да ускори зареждането на големи JAR архиви
        • Общите JAR файлове се зареждат в обща за различните инстанции на JVM памет
    Още новости в JDK 1.5
  • 39.
    • Подобрения в Desktop GUI библиотеките
      • Подобрения в скоростта
      • Java2D може да ползва OpenGL
      • XAWT – Олекотена AWT библиотека за X11 терминали
      • Нови look-and-feel схеми
    Още новости в JDK 1.5
  • 40. За повече информация
    • За download на JDK 1.5 beta 2 :
      • http://java.sun.com/j2se/1.5.0/download.jsp
    • Технически преглед:
      • http://java.sun.com/developer/technicalArticles/releases/j2se15/
    • New Features of J2SE 1.5 (Tiger):
      • http://www.javacommunity.org/conference/5th/data/2_1.pdf
    • Java JDK 1.5 :
      • http://www.tyma.com/tymajdk15.pdf
  • 41. Новости в JDK 1.5
    • Въпроси?