Novos recursos em java 7


Respostas:


211

Recursos e aprimoramentos do Java SE 7 das notas de versão do JDK 7

Este é o resumo dos novos recursos do Java 7 da página de recursos do OpenJDK 7 :

vm JSR 292: Suporte para linguagens digitadas dinamicamente (InvokeDynamic)
        Verificação estrita de arquivo de classe
lang JSR 334: Pequenos aprimoramentos de linguagem (Projeto Moeda)
arquitetura do carregador de classe de atualização principal
        Método para fechar um URLClassLoader
        Simultaneidade e atualizações de coleções (jsr166y)
i18n Unicode 6.0
        Melhoria de local
        Local do usuário separado e local da interface do usuário
ionet JSR 203: Mais novas APIs de E / S para a plataforma Java (NIO.2)
        Fornecedor de sistema de arquivos NIO.2 para arquivos zip / jar
        SCTP (protocolo de transmissão de controle de fluxo)
        SDP (protocolo Sockets Direct)
        Use a pilha IPv6 do Windows Vista
        TLS 1.2
sec criptografia de curva elíptica (ECC)
jdbc JDBC 4.1
pipeline XRender do cliente para Java 2D
        Crie novas APIs de plataforma para recursos gráficos 6u10
        Nimbus look-and-feel para Swing
        Componente Swing JLayer
        Sintetizador de som Gervill [NOVO]
web Atualizar a pilha XML
MBeans otimizados de gerenciamento [ATUALIZADO]

Exemplos de código para novos recursos em Java 1.7

Declaração de teste com recursos

isto:

BufferedReader br = new BufferedReader(new FileReader(path));
try {
   return br.readLine();
} finally {
   br.close();
}

torna-se:

try (BufferedReader br = new BufferedReader(new FileReader(path)) {
   return br.readLine();
}

Você pode declarar mais de um recurso para fechar:

try (
   InputStream in = new FileInputStream(src);
   OutputStream out = new FileOutputStream(dest))
{
 // code
}

Sublinhados em literais numéricos

int one_million = 1_000_000;

Strings em switch

String s = ...
switch(s) {
 case "quux":
    processQuux(s);
    // fall-through

  case "foo":
  case "bar":
    processFooOrBar(s);
    break;

  case "baz":
     processBaz(s);
    // fall-through

  default:
    processDefault(s);
    break;
}

Literais binários

int binary = 0b1001_1001;

Inferência de tipo aprimorada para criação de instância genérica

Map<String, List<String>> anagrams = new HashMap<String, List<String>>();

torna-se:

Map<String, List<String>> anagrams = new HashMap<>();

Captura de múltiplas exceções

isto:

} catch (FirstException ex) {
     logger.error(ex);
     throw ex;
} catch (SecondException ex) {
     logger.error(ex);
     throw ex;
}

torna-se:

} catch (FirstException | SecondException ex) {
     logger.error(ex);
    throw ex;
}

SafeVarargs

isto:

@SuppressWarnings({"unchecked", "varargs"})
public static void printAll(List<String>... lists){
    for(List<String> list : lists){
        System.out.println(list);
    }
}

torna-se:

@SafeVarargs
public static void printAll(List<String>... lists){
    for(List<String> list : lists){
        System.out.println(list);
    }
}

4
Código +1 para os exemplos de código difíceis de encontrar. Você pode adicionar mais?
Zasz

3
A inferência de tipo melhorada parece ser uma cópia triste do C # com uma mudança estranha onde uma referência é digitada, mas o objeto não é ?? Que comédia!
Zasz

1
@Zasz, sim claro, está em melhoria contínua
didxga

Então a pergunta é para o OP, qual a sua opinião? Essas melhorias são apenas do lado da produtividade ou podem realmente melhorar o desempenho dos programas? Se nenhum bytecode for alterado, os novos aprimoramentos de idioma podem ser usados ​​com o bytecode marcado como 1.5?
Dmitriy R

Embora não seja uma melhoria da linguagem, existe a nova Objectsclasse, com métodos estáticos para evitar a verificação de referências nulas. Exemplo: if (obj != null && obj.equals(anotherObj))torna - seif (Objects.equals(obj, anotherObj))
Carcamano

13

Novo recurso do Java Standard Edition (JSE 7)

  1. Decore os componentes com a classe JLayer:

    A classe JLayer é um decorador flexível e poderoso para componentes Swing. A classe JLayer em Java SE 7 é semelhante em espírito ao projeto do projeto JxLayer em java.net. A classe JLayer foi inicialmente baseada no projeto JXLayer, mas sua API evoluiu separadamente.

  2. Strings in switch Statement :

    No JDK 7, podemos usar um objeto String na expressão de uma instrução switch. O compilador Java geralmente gera bytecode mais eficiente a partir de instruções switch que usam objetos String do que instruções if-then-else encadeadas.

  3. Inferência de tipo para instância genérica:

    Podemos substituir os argumentos de tipo necessários para invocar o construtor de uma classe genérica por um conjunto vazio de parâmetros de tipo (<>), desde que o compilador possa inferir os argumentos de tipo a partir do contexto. Este par de colchetes angulares é informalmente chamado de diamante. Java SE 7 suporta inferência de tipo limitada para criação de instância genérica; você só pode usar a inferência de tipo se o tipo parametrizado do construtor for óbvio a partir do contexto. Por exemplo, o exemplo a seguir não compila:

    List<String> l = new ArrayList<>();
    l.add("A");
    l.addAll(new ArrayList<>());

    Em comparação, o exemplo a seguir compila:

    List<? extends String> list2 = new ArrayList<>();
    l.addAll(list2);
  4. Captura de vários tipos de exceção e relançamento de exceções com verificação de tipo aprimorada:

    No Java SE 7 e posterior, um único bloco catch pode manipular mais de um tipo de exceção. Este recurso pode reduzir a duplicação de código. Considere o seguinte código, que contém código duplicado em cada um dos blocos catch:

    catch (IOException e) {
        logger.log(e);
        throw e;
    }
    catch (SQLException e) {
        logger.log(e);
        throw e;
    }

    Em releases anteriores ao Java SE 7, é difícil criar um método comum para eliminar o código duplicado porque a variável e tem tipos diferentes. O exemplo a seguir, que é válido em Java SE 7 e posterior, elimina o código duplicado:

    catch (IOException|SQLException e) {
        logger.log(e);
        throw e;
    }

    A cláusula catch especifica os tipos de exceções que o bloco pode manipular, e cada tipo de exceção é separado por uma barra vertical (|).

  5. O pacote java.nio.file

    O java.nio.filepacote e seu pacote relacionado, java.nio.file.attribute, fornecem suporte abrangente para E / S de arquivos e para acessar o sistema de arquivos. Um provedor de sistema de arquivo zip também está disponível no JDK 7.

Fonte: http://ohmjavaclasses.blogspot.com/


6

3

Além do que John Skeet disse, aqui está uma visão geral do projeto Java 7 . Inclui uma lista e descrição dos recursos.

Nota: o JDK 7 foi lançado em 28 de julho de 2011, então agora você deve ir para o site oficial do java SE .


Para sua informação, esta é uma boa apresentação, mas muito antiga e um tanto desatualizada.
Alex Miller

Recebi uma página de erro em hebraico quando tentei este link - há uma cópia mais atualizada em algum lugar?
Simon Nickerson,

1

Mudanças de idioma :

-Project Coin (small changes)
-switch on Strings
-try-with-resources
-diamond operator

Mudanças na biblioteca :

-new abstracted file-system API (NIO.2) (with support for virtual filesystems)
-improved concurrency libraries
-elliptic curve encryption
-more incremental upgrades

Mudanças de plataforma :

-support for dynamic languages

Abaixo está o link que explica os recursos recém-adicionados do JAVA 7, a explicação é cristalina com os possíveis pequenos exemplos para cada recurso:

http://radar.oreilly.com/2011/09/java7-features.html


0

Usando o operador Diamond (<>) para criação de instância genérica

Map<String, List<Trade>> trades = new TreeMap <> ();

Usando strings em instruções switch

String status=  something”;
   switch(statue){
     case1: 
     case2: 
     default:
    }

Sublinhado em literais numéricos

int val 12_15; long phoneNo = 01917_999_720L;

Usando uma única instrução catch para lançar múltiplas exceções usando “|” operador

catch(IOException | NullPointerException ex){
          ex.printStackTrace();   
    }

Não há necessidade de fechar () recursos porque Java 7 fornece instrução try-with-resources

try(FileOutputStream fos = new FileOutputStream("movies.txt");
      DataOutputStream dos = new DataOutputStream(fos)) {
              dos.writeUTF("Java 7 Block Buster");
  } catch(IOException e) {
        // log the exception
  }

literais binários com prefixo “0b” ou “0B”


0

Acho que ForkJoinPool e o aprimoramento relacionado ao Executor Framework são uma adição importante no Java 7.


-2

A lista a seguir contém links para as páginas de aprimoramentos no Java SE 7.

Swing
IO and New IO
Networking
Security
Concurrency Utilities
Rich Internet Applications (RIA)/Deployment
    Requesting and Customizing Applet Decoration in Dragg able Applets
    Embedding JNLP File in Applet Tag
    Deploying without Codebase
    Handling Applet Initialization Status with Event Handlers
Java 2D
Java XML  JAXP, JAXB, and JAX-WS
Internationalization
java.lang Package
    Multithreaded Custom Class Loaders in Java SE 7
Java Programming Language
    Binary Literals
    Strings in switch Statements
    The try-with-resources Statement
    Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking
    Underscores in Numeric Literals
    Type Inference for Generic Instance Creation
    Improved Compiler Warnings and Errors When Using Non-Reifiable Formal Parameters with Varargs Methods
Java Virtual Machine (JVM)
    Java Virtual Machine Support for Non-Java Languages
    Garbage-First Collector
    Java HotSpot Virtual Machine Performance Enhancements
JDBC

Referência 1 Referência 2


1
Você deve fornecer descrições mais curtas ou exemplos em vez dessa lista, o que também podemos encontrar na página oficial do Java.
Ken Block
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.