Java 5 - Tiger

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Java 5 - Tiger - Presentation Transcript

    1. JSR#176 J2SE 5.0 (Tiger) v.1.2
    2. J2SE - Versões
      • 1.0
        • Linguagem inicial
      • 1.1
        • Inner Classes
        • Novo modelo de eventos
      • 1.4 (Merlin)
        • Asserções
      • 5.0 (Tiger)
        • Grandes novidades!
    3. J2SE 5.0 - Novidades
      • Autoboxing/Unboxing (JSR-201)
      • Enhanced for loop (JSR-201)
      • Type-safe enumerations (JSR-201)
      • Varargs
      • Static import (JSR-201)
      • Metadata (JSR-175)
      • Decimal Arithmetic Enhancement (JSR-13)
      • Formatted Input/Output
      • Concurrency Utilities (JSR-166)
      • Generics (JSR-14)
    4. J2SE 5.0 - Participantes da JSR
      • Apache Software Foundation
      • BEA Systems
      • Cisco Systems
      • Fujitsu Limited
      • IBM
      • Macromedia, Inc.
      • Oracle
      • SAS Institute Inc.
      • Sun Microsystems, Inc.
      • Apple Computer, Inc.
      • Borland Software Corporation
      • Doederlein, Osvaldo Pinali
      • Hewlett-Packard
      • Kreileder, Juergen
      • Nokia Corporation
      • SAP AG
      • SavaJe Technologies
      • Zukowski, John A.
    5. Virtual Machine
      • Java Heap Self Tunning
        • A heap é automaticamente dimensionada pela VM.
      • Class Data Sharing (CDS)
        • A memória das classes do sistema são compartilhadas entre as diversas VM's no ar. Não suportado em Windows 98/ME.
      • Garbage Collector Ergonomics
        • O coletor paralelo pode adaptar a memória sem necessidade de parâmetros.
      • Fatal Error Handling
        • Melhorias para prover melhores informações.
    6. Tema anterior - Steel
    7. Tema novo - Ocean
    8. Autoboxing
      • Problema:
        • Conversão entre tipos primitivos e objetos wrapper .
        • Necessário quando adiciona-se primitivas à coleções.
      • int x = 2;
      • Integer y = new Integer(3);
      • ArrayList al = new ArrayList();
      • al.add(new Integer(4));
      • int b = ((Integer) al.get(0)).intValue();
    9. Autoboxing
      • Solução:
        • Deixe o compilador fazer isto.
      • int x = 2;
      • Integer y = 3;
      • ArrayList al = new ArrayList();
      • al.add(4);
      • int b = (Integer) al.get(0);
    10. Enhanced for Loop
      • Problema:
        • Navegar numa coleção é trabalhoso.
        • Iterators são usados para pegar elementos e é fácil de gerar erros.
        • É fácil gerar RuntimeExceptions .
      • void cancelAll(Collection c) {
        • for (Iterator i = c.iterator(); i.hasNext(); ){
          • TimerTask task = (TimerTask)i.next();
          • task.cancel();
        • }
      • }
    11. Enhanced for Loop
      • Solução:
        • Deixe o compilador fazer isto.
        • Novo comando:
          • for (variável : coleção)
        • Também funciona com arrays.
      • void cancelAll(Collection c) {
        • for (TimerTask task : c) {
          • task.cancel();
        • }
      • }
    12. Type-safe enumerations
      • Problema:
        • Não há maneira de definir variáveis que só possam receber determinados valores.
      • public final class Naipe {
        • public static final int OURO = 0;
        • public static final int ESPADA = 1;
        • public static final int COPAS = 2;
        • public static final int PAUS = 3;
      • }
      • int naipe = Naipe.OURO;
    13. Type-safe enumerations
      • Solução:
        • Novo tipo: enum
        • Gera uma subclasse de java.lang.Enum
      • public enum Naipe {
        • OURO, ESPADA, COPAS, PAUS;
      • }
      • Naipe naipe = Naipe.OURO;
    14. Type-safe enumerations
      • Criando seu próprio tipo de enumeração:
        • Neste caso há a necessidade de sobrecarga do construtor e dos métodos envolvidos.
      • public enum Coin {
        • penny(1), nickel(5), dime(10), quarter(25);
        • Coin(int value) {
          • this.value = value;
        • }
        • private final int value;
        • public int value() {
          • return value;
        • }
      • }
    15. Varargs
      • Problema:
        • Não é possível definir métodos que permitam um número variável de argumentos.
      • public String append(String s1, String s2) {
        • return s1.concat(s2);
      • }
      • public String append(String s1, String[] s2) {
        • for (int i=0; i<s2.length; i++) {
          • s1 = s1.concat(s2[i]);
        • }
        • return s1;
      • }
    16. Varargs
      • Solução:
        • Deixe o compilador fazer isto.
        • Nova sintaxe:
          • método(Object... o)
      • public String append(String s1, String... s2) {
        • for (int i=0; i<s2.length; i++) {
          • s1 = s1.concat(s2[i]);
        • }
        • return s1;
      • }
      • append(“a”, “b”);
      • append(“a”, “b”, “c”, “d”);
    17. Static import
      • Problema:
        • Há a necessidade de especificar o nome da classe sempre que invocar um método estático.
      • Math.sqrt(9.0);
      • Math.sin(90.0);
      • Math.log(10.0);
    18. Static import
      • Solução:
        • Novo comando import que define a classe que contém o método estático.
        • import static classe.*;
        • import static classe.metodo;
        • Import static classe.atributo;
      • import static Math.*;
      • sqrt(9.0);
      • sin(90.0);
      • log(10.0);
    19. Metadata
      • Problema:
        • Necessidade de escrever código repetitivo e excessivo para tarefas comuns.
      • public interface CoffeeOrderIF extends Remote {
        • public Coffee [] getPriceList() throws RemoteException;
        • public String orderCoffee(String name, int quantity)throws RemoteException;
      • }
      • public class CoffeeOrderImpl implements CoffeeOrderIF {
        • public Coffee [] getPriceList() {...}
        • public String orderCoffee(String name, int quantity) {...}
      • }
    20. Metadata
      • Solução:
        • Criar uma meta-linguagem que indique às ferramentas o código faltante.
      • public class CoffeeOrder {
        • @Remote public Coffee [] getPriceList() {...}
        • @Remote public String orderCoffee(String name, int quantity) {...}
      • }
    21. Decimal Arithmetic Enhancement
      • Problema:
        • A classe BigDecimal não atende as necessidades.
        • Falta diversas operações utilizadas em aplicações.
      • Solução:
        • Criados novos construtores e métodos na classe BigDecimal:
          • divide
          • divideToIntegralValue
          • scaleByPowerOfTen
    22. Formatted Input
      • Criada a classe Scanner para facilitar a leitura da console ou de qualquer stream .
      • Scanner s=Scanner.create(System.in);
      • String nome=s.next();
      • int idade=s.nextInt();
      • System.out.println(nome + “ tem “ + idade + “ anos”);
      • s.close();
    23. Formatted Output
      • Java ganha printf !
      • Irá facilitar a migração de aplicações legadas em 'C', pois usa a mesma sintaxe.
      • java.util.Formatter
      • String nome = “joao”;
      • int idade = 12;
      • System.out.printf(“%1$s tem %2$d anos”, nome, idade);
    24. Concurrency Utilities
      • Problema:
        • Aplicações que necessitam de muito controle sobre as Threads em execução demandam muito esforço de programação.
        • Criação de semáforos, sincronizadores, executores, canais de troca de dados, etc...
        • O Java fornece apenas Threads simples e objetos monitores, o que é suficiente para a grande maioria dos casos.
    25. Concurrency Utilities
      • Solução:
        • Doug Lea havia criado uma API chamada util.concurrent ( http://gee.cs.oswego.edu ).
        • A API fez sucesso e virou uma JSR (166).
        • Esta agora incorporada a Core API como java.util.concurrent.
        • Principais classes:
          • Semaphore
          • Executors
          • CyclicBarrerier
    26. Generics
      • Problema:
        • Tipos em coleções.
        • Não pode ser verificado em tempo de compilação.
        • Necessário uso constante de casting .
        • Pode gerar erros de execução ( ClassCastException ).
      • ArrayList l = new ArrayList();
      • l.add(new Integer(1));
      • l.add(new Integer(2));
      • Integer x1 = (Integer) l.get(0);
      • int x2 = ((Integer) l.get(1)).intValue();
    27. Generics
      • Solução:
        • Diga ao compilador qual o tipo da coleção.
        • O compilador inclui os casting .
        • Garantia de correto funcionamento desde que todo o código envolvido seja genérico.
      • ArrayList<Integer> l = new ArrayList<Integer>();
      • l.add(new Integer(1));
      • l.add(2);
      • Integer x1 = l.get(0);
      • int x2 = l.get(1);
    28. Generics
      • Mais problemas:
        • Métodos que recebem coleções de argumento devem verificar cada objeto com relação ao tipo, ou arriscar receber RuntimeExceptions.
      • static void dumpSam(Collection c) {
        • for (Iterator i = c.iterator(); i.hasNext();){
          • String s = (String) i.next();
          • if (s.indexOf(&quot;sam&quot;) > 0)
            • System.out.println(s);
        • }
      • }
    29. Generics
      • Mais soluções:
        • Definir o tipo genérico do argumento.
      • static void dumpSam(Collection<String> c) {
        • for (Iterator<String> i=c.iterator(); i.hasNext();) {
          • String s = i.next();
          • if (s.indexOf(&quot;sam&quot;) > 0)
            • System.out.println(s);
        • }
      • }
    30. Generics - Criando Classes
      • Garagem específica:
      • public class Garagem {
        • private ArrayList vagas = new ArrayList();
        • public void estaciona(Carro c) {
          • this.vagas.add(c);
        • }
        • public Carro retira() {
          • return (Carro) this.vagas.remove(0);
        • }
      • }
    31. Generics - Criando Classes
      • Para criar a sua própria classe genérica, basta definir o tipo genérico entre “<” “>” ao lado do nome da classe. Garagem genérica:
      • public class Garagem<Generico> {
        • private ArrayList<Generico> vagas = new ArrayList<Generico>();
        • public void estaciona(Generico c) {
          • this.vagas.add(c);
        • }
        • public Generico retira() {
          • return this.vagas.remove(0);
        • }
      • }
    32. Generics - Bounds
      • Para restringir quais classes podem ser utilizadas, basta usar o comando extends na definição. Garagem genérica, mas nem tanto:-)
      • public class Garagem<Generico extends Veiculo>{
        • private ArrayList<Generico> vagas = new ArrayList<Generico>();
        • public void estaciona(Generico c) {
          • this.vagas.add(c);
        • }
        • public Generico retira() {
          • return this.vagas.remove(0);
        • }
      • }
    33. Generics - Covariant Return Types
      • O retorno de um método sobrescrito cria um novo método.
      • class Fruit implements Cloneable {
        • Fruit copy() throws CloneNotSupportedException {
          • return (Fruit)clone();
      • }}
      • class Apple extends Fruit implements Cloneable{
        • Apple copy() throws CloneNotSupportedException {
        • return (Apple)clone();
      • }}
    34. Generics - UML
    35. Link
      • Para baixar o novo Java SDK:
      • http://java.sun.com/j2se/1.5.0/
    36. J2SE 5.0 - Tiger Obrigado! To the most despised cast We'll bid a fond farewell at last With generics' burning spear The need for cast will disappear -Joshua Bloch

    + Glaucio ScheibelGlaucio Scheibel, 2 years ago

    custom

    482 views, 0 favs, 0 embeds more stats

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 482
      • 482 on SlideShare
      • 0 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 9
    Most viewed embeds

    more

    All embeds

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories

    Tags