Funkcjonalność języka Java wprowadzone w wersji J2SE 5

background image

29 września 2004 roku Sun wypuścił kolejną wersję
oznaczoną Java 5.0
(wg numeracji wewnętrznej Sun jest to Java 1.5).

Ta edycja zawiera wiele nowości i udogodnień, przez
wielu określana jest jako najbardziej innowacyjne
wydanie Javy od czasu pierwszej edycji z 1998 roku.

background image

*

Nowa pętla for

Nowa pętla for

*

Typy generyczne

Typy generyczne

*

Autoboxing/Unboxing

Autoboxing/Unboxing

*

Typy wyliczeniowe (Enum)

Typy wyliczeniowe (Enum)

*

Mechanizm zmiennej liczby

Mechanizm zmiennej liczby

argumentów

argumentów

*

Statyczny import

Statyczny import

*

Mechanizm metadanych

Mechanizm metadanych

background image

*

Do tej pory przechodzenie po kolekcji było paskudniejsze, niz

powinno byc

void cancelAll(Collection<TimerTask> c) {

for (Iterator<TimerTask> i = c.iterator(); i.hasNext(); )

i.next().cancel();

}

*

Obecnie można do tego wykorzystać nową pętlę for,

void cancelAll(Collection<TimerTask> c) {

for (TimerTask t : c) t.cancel();

}

*

Taka metoda oprócz tego, że krótsza, dzięki czemu łatwiej i

zwieŸlej oddaje zamiar programisty, nie wymaga też ręcznego

okreŸlania iteratorów - mniej miejsca na zrobienie błędów.

background image

*

Jedną z nowoŸci w Javie 5.0 jest
wprowadzenie typów generycznych
Powody wprowadzenia:

*

Umożliwia tworzenie klas
nieograniczanych typami danych

*

Wymuszenie zgodności typów

*

Zwiększenie przejrzystości kodu

background image

*

Lista w starej wersji

List myIntList = new LinkedList();
myIntList.add(new Integer(0));
Integer x = (Integer) myIntList.iterator().next();

*

Lista z typami generycznymi

List<Integer> myIntList = new LinkedList<Integer>();
myIntList.add(new Integer(0));
Integer x = myIntList.iterator().next();

*

Sprawdzanie zgodności typów w momencie kompilacji, nie
działania programu.

*

Wymusza utrzymanie zależności pomiędzy obiektami

*

Pokazuje zamiar programisty

background image

Przerzucono z programisty na kompilator
zadanie opakowywania wartości typów
pierwotnych przy operacjach na kolekcjach.

Kiedyś:

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(0, new Integer(42));
int total = (list.get(0)).intValue();

Teraz:

ArrayList<Integer> list = new ArrayList<Integer>();

list.add(0, 42);
int total = list.get(0);

background image

Rozwiązania stosowane do tej pory:

*

Ręczne wyliczenie na wartościach całkowitych:

public static final int SEASON_WINTER = 0;
public static final int SEASON_FALL = 1

*

Typesafe enum

public final class Enum {
public static final Enum TRUE = new Enum ();
public static final Enum FALSE = new Enum ();
private Enum () {}
}

background image

Ręczne wyliczanie wartości:

*

Brak ochrony typu

*

Brak przestrzeni nazw

*

Wypisane wartości są bezużyteczne

Typesafe Enum

*

Nie można użyć przy switch

*

Źle znoszą serializacji

background image

*

Nowy mechanizm wyliczeniowy:

enum Season { WINTER, SPRING, SUMMER, FALL };

*

Każdy typ wyliczeniowy posiada metodę values()
zwracającą tablicęwartości.

*

można dodawać dodatkowe dane, dodawać specyficzne
zachowanie, implementować interfejsy itd..

background image

*

Do tej pory do zmiennej liczby argumentów potrzebna była
tablica

*

Z nowym mechanizmem:

public static String format(String pattern, Object... arguments);

public static String format(String pattern, Object... arguments);

*

‘…’ oznacza możliwość wystąpienia w
tym miejscu sekwencji lub tablicy
argumentów.

background image

*

Do tej pory sięganie do klasowych pól i

*

metod wymuszało wpisanie nazwę klasy

double r = Math.cos(Math.PI * theta);

*

Korzystając z mechanizmu static import można pominąć
takie prefiksowanie:

import static java.lang.Math.*;
double r = cos(PI * theta);

background image

*

Bardziej deklaratywne programowanie

*

Automatyczne tworzenie standardowego
kodu wymaganego przez niektóre API
(np. JAX-RPC)

*

Możliwość automatycznego tworzenia
wielu zgodnych ze sobą plików na
podstawie tylko jednego pliku

background image

*

Najbardziej znaczące w wydaniu wydają się typy
generyczne oraz mechanizm annotacji

*

Wprowadzenie konstrukcji skracających kod oraz

poprawiających czytelność

*

Najwieksza przebudowa w jezyku od czasu wejscia na
rynek.

background image

*

http://java.sun.com/j2se/1.5.0/docs/relnotes/features.html

*

http://www.javaworld.com/javaworld/jw-07-2004/jw-0719-
tiger3.html

*

http://java.sun.com/j2se/1.5.0/docs/guide/apt/index.html

*

http://www.softwaresummit.com/2004/speakers/LandersA
nnotations.pdf

*

http://www.softwaresummit.com/2004/speakers/Landers
Generics.pdf

background image

KONIEC


Document Outline


Wyszukiwarka

Podobne podstrony:
Wprowadzenie do jezyka Java Przewodnik krok po kroku
Językoznawstwo ogólne, JZY. funkcje jezyka, JĘZYKOZNAWSTWO
JAVA wprowadzenie
Java-wprowadzenie, S
Formy komunikowania się, Funkcje języka, Blokady komunikacji
Funkcje języka
Wrocław Sedek11 funkcje dokladanosci czasowej wprowadzenie
funkcje języka, Szkoła- pomoce naukowe ;P, Ściągi;)
Funkcje języka
Zróżnicowanie funkcjonalne języka polskiego - wykres, Nauka o komunikowaniu, Kultura języka
11 Społeczne aspekty funkcjonowania języka
Gregorczykowa funkcje języka i wypowiedzi
Podstawy języka java script
Java, Wprowadzenie
Funkcje języka i tekstu (6), Polonistyczne
Podstawy jezyka Java id 367418 Nieznany
Akt mowy, funkcje języka wg Jacobsona, Furnala i reszty
Funkcje języka, Polonistyka, Językoznawstwo
Omów funkcje języka

więcej podobnych podstron