Primeiros passos com o Java Development Kit 7

Java Development Kit  7

    Demorou, mas enfim chegou o tão esperado “JDK 7”, fazia tempo que queria postar essa notícia, mas só agora que chegou o grande dia. Foram cinco anos de desenvolvimento, muitas brigas, mudanças de nomes, JSRs com votações contra, tudo indo contra a maré, cheguei até a ver na internet notícias como:  “Fim do Java” ! Pode isso ?  
   Falando sobre esta release, queria dizer a todos que sinceramente esperava muito mais, principalmente pelo tempo em que a mesma teve para ser produzida. Dica-se de passagem ainda tenho a visão de que, de todas as JDKs a 1.5 ainda foi a mais impactante. Mesmo assim, separei logo abaixo, alguns exemplos e links interessantes sobre esta release.
JDK 7 Features Summary

    Neste link você encontra um sumário das novidades desta release.

Improved Exception Handling – Multi-Catch ( JSR 334 )

    Um coisa interessante da JDK 7, é a possibilidade de se utilizar o simbolo pipe:  para capturar um conjunto de exceções, conforme código a seguir :   

try {


   final Class clazz = Class.forName(className);
   final Class[] ctorParams = {String.class, String.class, Integer.TYPE};
   final Constructor ctor = clazz.getConstructor(ctorParams);
   final Person person = (Person) ctor.newInstance(newLastName, newFirstName, newAge);
   final Method toStringMethod = clazz.getDeclaredMethod(methodName);
   out.println(toStringMethod.invoke(person));


}catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException|  InvocationTargetException | InstantiationException reflectionEx){


     err.println( “Reflection error trying to invoke ” + className + “.”  + methodName + “: ” + reflectionEx);


}

Strings in Switch

     Agora ja é possível  utilizar uma variável do tipo String em instruções do tipo Switch, conforme o exemplo abaixo:

      public static void main(final String[] arguments){

      final String name =  “Dustin”;
 
      switch (name) {

         case “Dino” :
            out.println(“Flintstones?”);
            break;
         case “Neo” :
            out.println(“Matrix?”);
            break;
         case “Gandalf” :
            out.println(“Lord of the Rings?”);
            break;
         case “Dustin” :
            out.println(“Inspired by Actual Events”);
            break;
         default :
            out.println(“The Good, the Bad, and the Ugly?”);
      }


   }
  

Binary integral literals and underscores in numeric literals   

   Conforme o exemplo a seguir, ja é possível criar variaveis do tipo inteiro, utilizando underscores, parece uma coisa bem simples, mas quando vc trabalha com números binários muito grandes, você percebe que isso ajuda e muito.
    Imagina o número:
  int maxInteger = 0b01111111111111111111111111111111; 
     No JDK 7, ele é melhor representado separado por undescores, dessa forma:
    
   int maxInteger = 0b0111_1111_1111_1111_1111_1111_1111_1111;

 
Try With-Resources Statement

     Muitos que trabalham com Java a mais tempo ja devem ter notado o quanto é difícil e chato trabalhar com recursos que necessitam de fechamento explicito. ( Conexao de Banco, Arquivos e etc )
     Um exemplo disso é o código logo abaixo, percebam o quando de código extra foi necessario, apenas para fechamento de recursos.

private static void customBufferStreamCopy(File source, File target) {

    InputStream fis = null;
    OutputStream fos = null;

    try {

        fis = new FileInputStream(source);
        fos = new FileOutputStream(target);

        byte[] buf = new byte[8192];

        int i;

        while ((i = fis.read(buf)) != -1) {
         fos.write(buf, 0, i);
        }

   }catch (Exception e) {

        e.printStackTrace();

   } finally {

         close(fis);
         close(fos);
   }
}

private static void close(Closeable closable) {

     if (closable != null) {

         try {

             closable.close();
         } catch (IOException e) {
             e.printStackTrace();
         }

      }

}

     Agora nesta nova versão, todos os recursos são automaticamente fechados, após a execução do bloco Try, sendo assim, o código anterior pode ser substituido por este:

private static void customBufferStreamCopy(File source, File target) {

    try (

        InputStream fis = new FileInputStream(source);
        OutputStream fos = new FileOutputStream(target)){

        byte[] buf = new byte[8192];

        int i;

        while ((i = fis.read(buf)) != -1) {
           fos.write(buf, 0, i);
        }
    }catch (Exception e) {
        e.printStackTrace();
    }

}


Simplified Varargs Method Invocation
    Quando um programador tenta invocar um método “varargs” com um “non-reifiable varargs type”, o compilador atualmente gera o  warning: “unsafe operation”, o JDK 7 moveu o warning da chamáda para o método e colocou na propria declaração do mesmo, dessa forma, segundo o criador da proposta isso reduz os warnings reportados, vide a proposta.

     Antes da mudança
  

  static List asList(T… elements) { … }

  static List<callable> stringFactories() {

    Callable a, b, c;

    …

    *// Warning: **”uses unchecked or unsafe operations”*
    return asList(a, b, c);

  }</callable

     Depois da mudança


       *// Warning: **”enables unsafe generic array creation”*
        static List asList(T… elements) { … }

        static List<callable> stringFactories() {</callable

           Callable a, b, c;
           …


           return asList(a, b, c);
        }

Performance na JDK 7    

   Alguns artigos que recomendo:

   http://lingpipe-blog.com/2009/03/30/jdk-7-twice-as-fast-as-jdk-6-for-arrays-and-arithmetic/
   http://download.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html

Abrcs
Natanael Fonseca

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s