as modificações na linguagem: java 7 e java 8

46
Globalcode – Open4education As modificações na linguagem: Java 7 e 8 Eder Magalhães @edermag www.yaw.com.br 2012 Saturday, May 19, 12

Upload: eder-magalhaes

Post on 27-Jun-2015

1.714 views

Category:

Technology


2 download

DESCRIPTION

Apresentação realizada durante o JustJava 2012.

TRANSCRIPT

Page 1: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

As modificações na linguagem:Java 7 e 8Eder Magalhães

@edermagwww.yaw.com.br

2012

Saturday, May 19, 12

Page 2: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Agenda

Expectativa na evolução da Linguagem JavaDolphin: o Java 7Mudanças na linguagem: Projeto CoinNew IO no Java 7 (NIO.2)JDBC 4.1;Outras características do Java 7;Conclusão do plano B: Java 8;Type Annotations + Jigsaw + Lambda;Links

Saturday, May 19, 12

Page 3: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Histórico

Última versão com mudanças na linguagem:Java 5 (Tiger) – 30/09/2004;

Java 6 (Mustang) foi disponibilizado em 11/12/2006;

Java 7 (Dolphin) começou em 08/2006 e foi disponibilizado em 07/2011;

Saturday, May 19, 12

Page 4: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Durante esses 5 anos

Expectativa por novas funcionalidades;

Oracle adquire a Sun;

Novo planejamento de entrega:Plano A:

JDK 7 completo com previsão para 2012;Plano B:

JDK 7 com algumas features com previsão para 2011;JDK 8 com funcionalidades complementares com previsão para o final de 2012;

Saturday, May 19, 12

Page 5: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Dolphin, o Java 7 !

Saturday, May 19, 12

Page 6: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Java 7 (JSR 336)

Melhorias:Linguagem;Virtual Machine;Class loader;I/O, Rede e Concorrência;JDBC;Swing;Web;Javadoc;

Saturday, May 19, 12

Page 7: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Projeto Coin

Implementa a especificação JSR 334;

O objetivo do projeto é prover melhorias para a linguagem Java;

Reduz, um pouco, a verbosidade da linguagem;

Subprojeto do OpenJDK;

Saturday, May 19, 12

Page 8: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Separador de dígitos e literal binária

// isso é esquisito... mas compila!int i = 1_234_567_890;Integer i1 = new Integer(12_34_56_78_90);

float f1 = 123_456.7_5F;double d1 = 12____345D;double d2 = 0x1.ffff_ffff_ffff_fP1_023;

// isso não compila:int intRuim1 = _1234, intRuim2 = 1234_;float outroRuim = 123_456.75_F;

// literal binária:int x = 0b001; // o valor é 1 int y = 0b010; // o valor é 2

Saturday, May 19, 12

Page 9: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

String na condição do switch

public static void main(String[] args) { String msg = "oi"; switch(msg) { case "oi": System.out.println("Ola, bem vindo"); break; case "tchau": System.out.println("Tchau, ate mais"); break; default: System.out.println("mal educado..."); }}

O compilador realiza a comparação pelo hashcode!

Saturday, May 19, 12

Page 10: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Tipos genéricos sem operador Diamond

Map<Integer, Set<Integer>> mapOfIntegers = new HashMap<Integer, Set<Integer>>();

Integer aKey = 10;Set<Integer> aSet = new HashSet<Integer>(); mapOfIntegers.put(aKey, aSet);

Saturday, May 19, 12

Page 11: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Tipos genéricos com operador Diamond

Map<Integer, Set<Integer>> mapOfIntegers = new HashMap<>();

Integer aKey = 10;Set<Integer> aSet = new HashSet<>(); mapOfIntegers.put(aKey, aSet);

Saturday, May 19, 12

Page 12: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Tipos genéricos com operador Diamond

Map<Integer, Set<Integer>> mapOfIntegers = new HashMap<>();

Integer aKey = 10;Set<Integer> aSet; mapOfIntegers.put(aKey, aSet = new HashSet<>());

// a instrução a seguir não compila! mapOfIntegers.put(aKey, new HashSet<>());

Saturday, May 19, 12

Page 13: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Simplificação na chamada de métodos com varargs

public static <T> List<T> asList(T... a) { return new ArrayList<>(a);}

<T> Tipo<T> nomeDoMetodo(T... params)

O warning é gerado para qualquer método com esse tipo de assinatura:

Método asList da classe Arrays:

Saturday, May 19, 12

Page 14: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Simplificação na chamada de métodos com varargs

@SafeVarargspublic static <T> List<T> asList(T... a) { return new ArrayList<>(a);}

Solução: criar uma forma de informar o compilador que a chamada ao método asList não corre risco de problemas com tipo de dado!

Saturday, May 19, 12

Page 15: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Gerenciamento automático de recursos

Nova interface java.lang.AutoCloseable;

Bibliotecas adaptadas para implementar essa nova interface;

Mudanças em java.lang.Throwable:Novo construtor;Dois novos métodos;

Saturday, May 19, 12

Page 16: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Sem o gerenciamento automático…

public void lerArquivo() { FileReader reader = null; try { reader = new FileReader("arquivo"); // faz o processamento do arquivo } catch (IOException e) { // trata a exceção } finally { if(reader != null) { try { reader.close(); } catch (IOException e) { // tenta fazer alguma outra coisa aqui! } } }}

Saturday, May 19, 12

Page 17: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Sem o gerenciamento automático...

public void lerArquivo() { FileReader reader = null; try { reader = new FileReader("arquivo"); // faz o processamento do arquivo } catch (IOException e) { // trata a exceção } finally { if(reader != null) { try { reader.close(); } catch (IOException e) { // tenta fazer alguma outra coisa aqui! } } }}

Saturday, May 19, 12

Page 18: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Com o gerenciamento automático!

public void lerArquivo() {

try (FileReader reader = new FileReader("arquivo”)) { // faz o processamento do arquivo } catch (IOException e) { // trata a exceção }}

Saturday, May 19, 12

Page 19: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Gerenciamento automático de recursos

protected Throwable(String message, Throwable cause, boolean enableSuppresion, boolean writableStackTrace)

public final void addSuppressed(Throwable exception)

public final Throwable[] getSuppressed()

Throwable passa a suportar exceções suprimidas:

Saturday, May 19, 12

Page 20: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Multicatch

A cláusula catch está habilitada para uma série de tipos exceções separadas pelo operador “OR”, símbolo “|”, na declaração do paramêtro (tipo da exceção);

Dessa forma diferentes tipos de exceções podem ser tratados da mesma forma;

Saturday, May 19, 12

Page 21: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Sem o Multicatch

private Object novoObjeto(Class<?> clazz) { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException e) { System.err.println("Erro na criação do objeto"); throw new RuntimeException(e); } catch (IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw new RuntimeException(e); }}

Saturday, May 19, 12

Page 22: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Com Multicatch

private Object novoObjeto(Class<?> clazz) { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException | IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw new RuntimeException(e); }}

Saturday, May 19, 12

Page 23: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Rethrow

Se o parâmetro de uma exceção não for modificado e for relançado dentro do bloco catch, o compilador aplica uma análise mais precisa dos tipos que podem ser lançados;

Saturday, May 19, 12

Page 24: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Rethrow específico

private Object novoObjeto(Class<?> clazz)throws InstantiationException, IllegalAccessException { try { Object o = clazz.newInstance(); return o; } catch (Exception e) { System.err.println("Erro na criação do objeto"); throw e; }}

Saturday, May 19, 12

Page 25: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Novidades na API do Java 7

Saturday, May 19, 12

Page 26: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Novidades na API do Java 7

Saturday, May 19, 12

Page 27: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

New I/O do Java 7

JSR 203: Nova API para New I/O (“NIO.2”):FileSystem, PathFileSystems, Files, Paths;FileStore;BasicFileAttributes;

Melhorias na infra-estrutura I/O:Acesso assíncrono a sockets e arquivos;API para socket endereçado a multicasting;Suporte a multitarefa com sockets;

Saturday, May 19, 12

Page 28: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

NIO.2: API de I/O + eficaz Path home = Paths.get("/home/yaw"); Path foto = home.resolve("foto.jpg"); Path backup = home.resolve("foto_backup.jpg");

//backup de um aquivo Files.copy(foto, backup); //move o arquivo para outro diretório Path destino = Paths.get("/home/yaw/backup"); Files.move(backup, destino.resolve(backup.getFileName()));

//lista e imprime o conteúdo do diretório DirectoryStream<Path> stream = Files.newDirectoryStream(home); for (Path p : stream) { System.out.println("\t -" + p ); }

Saturday, May 19, 12

Page 29: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

JDBC 4.1

Suporte a AutoCloseable;Nova interface: RowSetProvider;

String query = "select nome, cpf from pessoa";

try (Connection con = DriverManager.getConnection(...); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query)) {

while (rs.next()) { String nome = rs.getString("nome"); String cpf = rs.getString("cpf"); System.out.printf("Nome:%s\t Cpf:%s %n", nome, cpf); }

}

Saturday, May 19, 12

Page 30: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Outras melhorias

Fork/Join framework (JSR 166)Melhorias em alguns componentes Swing;Ajustes na arquitetura do Class loader;Javadoc com visual mais interessante;Internacionalização:

Suporte a Unicode 6.0, IETF BCP47 e UTR35;Re-organização nas formas de locale;

Melhorias na JVM:Invoke Dynamic (JSR 292);G1: Garbage First;

Saturday, May 19, 12

Page 31: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Atualizações recentes do Java 7

JDK 7 update 4

Kit do Java 7 disponível para Mac OS;

Termino da fusão entre JRockit e HotSpot;

Saturday, May 19, 12

Page 32: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Fechando o plano B: Java 8!

Saturday, May 19, 12

Page 33: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Fechando o plano B: Java 8!

Saturday, May 19, 12

Page 34: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Java 8 (JSR 338)

Conclusão do Projeto Coin;Nova API para datas no Java;

Type Annotations;Projeto Jigsaw: suporte a definição de módulos;Projeto Lambda: uma linguagem mais eficiente;

Saturday, May 19, 12

Page 35: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Type Annotations (JSR 308)

Utilizar anotações em outros trechos do código;

Criar um mecanismo eficiente com regras e validação de tipos do Java baseado em anotações. A evolução da idéia implementada com @Override;

Saturday, May 19, 12

Page 36: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Type Annotations Demopublic void execute(@NonNull Object ref) { //algum processamento}

...

execute(new Object()); //ok!execute(null); //ñ compila!

@NonNull Object ref = getObject();

List<@NonNull String> nomes = ...nomes.add(null); //ñ compila!

class ValorNumerico<T extends @Nullable Number> { ...}

ValorNumerico<@Nullable Integer> v1; //ok!ValorNumerico<@NonNull Integer> v2; //ñ compila!

Saturday, May 19, 12

Page 37: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Projeto Jigsaw

Suporte a modularização da linguagem Java;Tornar o modelo de distribuição e execução do Java mais eficaz;Cada módulo:

é formado por conjunto de classes e interfaces;pode determinar sua versão;mantém arquivos de configurações/recursos;indica dependência a outros módulos, se existir;

Saturday, May 19, 12

Page 38: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Projeto Jigsaw Demo

//Arquivo modules-info.java

module yaw.projetos @ 1.2 { class yaw.projetos.Main; //entry-point (java -m ...) requires yaw.core @ 1.0; //dependência

exports yaw.projetos; permits yaw.financeiro;}

Saturday, May 19, 12

Page 39: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Projeto Lambda (JSR 335)

O Java mais poderoso em ambientes multi-core;Emprega ao Java um modelo de programação funcional;Definição de funções anônimas;Permite a referência a métodos;Interfaces com default methods;SAM são consideradas interfaces funcionais;Mudanças na bibliotecas do Java (Collection) para se adequar ao Lambda;

Saturday, May 19, 12

Page 40: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Projeto Lambda Demo

String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};

//lambda expressionsArrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2));

//target typingComparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);

Arrays.sort(nomes, c);

//method referenceArrays.sort(nomes, String::compareToIgnoreCase);

Saturday, May 19, 12

Page 41: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Experimente:http://jdk8.java.nethttp://jdk8.java.net/lambda

Saturday, May 19, 12

Page 42: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Rumores sobre o Java 9

VM auto ajustável (self tuning);Suporte a Big Data;Reificação dos tipos genéricos;Criar um protocolo de meta-objetos para comunicação com outras linguagens;Suporte a continuations;

Saturday, May 19, 12

Page 43: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

Rumores sobre o Java 9

VM auto ajustável (self tuning);Suporte a Big Data;Reificação dos tipos genéricos;Criar um protocolo de meta-objetos para comunicação com outras linguagens;Suporte a continuations;

Saturday, May 19, 12

Page 46: As modificações na Linguagem: Java 7 e Java 8

Globalcode  –  Open4education

[email protected]@edermag

Obrigado !

Saturday, May 19, 12