Mudanças no Java 7
Boa Tarde Soldados!
Venho aqui lhes passar algumas informações sobre nosso amiguinho java & que depois de tantos anos de espera finalmente saiu.
A lista de novas features podem ser encontradas aqui
O novo javadoc esta localizado neste link.
1) Switch com strings.
Por mais simples que essa feature possa parecer, é um grande avanço para o JAVA a funcionalidade de utilização de String dentro do bloco switch. Antes era possível utilizar o switch apenas com números inteiros. Quando precisávamos comparar String era necessário utilizar blocos if/else encadeados.
Blocos if/else encadeados são mais confusos e difíceis de ler. A opção de um bloco switch torna o mesmo código mais simples e com uma aparência clean:
Venho aqui lhes passar algumas informações sobre nosso amiguinho java & que depois de tantos anos de espera finalmente saiu.
A lista de novas features podem ser encontradas aqui
O novo javadoc esta localizado neste link.
1) Switch com strings.
Por mais simples que essa feature possa parecer, é um grande avanço para o JAVA a funcionalidade de utilização de String dentro do bloco switch. Antes era possível utilizar o switch apenas com números inteiros. Quando precisávamos comparar String era necessário utilizar blocos if/else encadeados.
Um exemplo de código de comparação de String em Java:
01 | String temp = "Java" ; |
02 | if (temp != null && temp.equals( "Cobol" )) { |
03 | System.out.println( "Utilizando Cobol" ); |
04 | } else if (temp != null && temp.equals( "DOT NET" )) { |
05 | System.out.println( "Utilizando DOT NET" ); |
06 | } else if (temp != null && temp.equals( "Java" )) { |
07 | System.out.println( "Utilizando Java" ); |
08 | } else { |
09 | System.out.println( "Não faço idéia" ); |
10 | } |
01 | String temp = "Java" ; |
02 |
03 | switch (temp) { |
04 | case "Cobol" : |
05 | System.out.println( "Utilizando Cobol" ); |
06 | break ; |
07 | case "DOT NET" : |
08 | System.out.println( "Utilizando DOT NET" ); |
09 | break ; |
10 | case "Java" : |
11 | System.out.println( "Utilizando Java" ); |
12 | break ; |
13 | default : |
14 | System.out.println( "Não faço idéia" ); |
15 | } |
Fica muito mais claro o fluxo dos blocos sem contar que podemos remover a instrução break e assim executar todos os blocos abaixo de forma simples. Assim como no if / else o switch utiliza o método equals para comparar as strings e por isso é case sensitive.
2) Declaração de literais e o uso do underscore
Agora é possível declarar números binários para variáveis inteiras em java. Isso é bem útil para quem utiliza o Java com linguagens de baixo nível.
Agora é possível declarar números binários para variáveis inteiras em java. Isso é bem útil para quem utiliza o Java com linguagens de baixo nível.
Um exemplo das novas possibilidade para números inteiros esta no código abaixo:
01 | //apenas a declaração de um inteiro |
02 | int normal = 5 ; |
03 | //declaração de um inteiro como hexadecimal com o prefixo '0x' / '0X' |
04 | int hexadecimal = 0x1A ; |
05 | //declaração de octal com o prefixo '0' |
06 | int octal = 02 ; //poucos sabem mais o número zero na frente deixa o inteiro com base 8 |
07 | //NOVIDADE java 7 declaração de binário com o prefixo '0b' / '0B' |
08 | int binario = 0b1001; |
09 | //Possível separar números por underscore. Facilita a declaração de números grandes |
10 | int contaBancaria = 10_000_000; |
A nova funcionalidade de declaração de variáveis utilizando o underscore como separador é útil para declararmos números com muitos algarismos. Quem nunca se deparou contando o número de zeros de uma variável?
Não podemos utilizar o underscore nos seguintes casos:
- No início ou fim de um número
- Junto (antes ou depois) com um ponto numa variável double/float
- Junto (antes ou depois de um caractere declarativo (x, b ou l)
1 | int valor1 = _0; |
2 | int valor2 = 0_; |
3 | double double1 = 0 ._2; |
4 | double double2 = 0_. 2 ; |
5 | int hexa1 = 0_x21; |
6 | int hexa2 = 0x_21; |
7 | int bin1 = 0b_00_1; |
3) try-with-resources e multi-catch.
Utilizar com inteligência os recursos do computador como sockets, streams, etc, é importantíssimo e sempre deu um trabalho extra para os desenvolvedores. Criar variáveis fora do try, fechar cada uma delas dentro do finally etc. Por vezes demorava o mesmo tempo criar uma implementação e o código para tratar erros e fechar recursos.
Utilizar com inteligência os recursos do computador como sockets, streams, etc, é importantíssimo e sempre deu um trabalho extra para os desenvolvedores. Criar variáveis fora do try, fechar cada uma delas dentro do finally etc. Por vezes demorava o mesmo tempo criar uma implementação e o código para tratar erros e fechar recursos.
Agora essa tarefa é facilitada pois podemos passar atributos para a cláusula try. Os atributos declarados dentro deste bloco são automaticamente fechados após a execução mesmo que ocorra uma exceção.
Para isso é preciso que o Objeto passado como parâmetro implemente a interface AutoCloseable.
1 | try (PreparedStatement ps = null ; |
2 | ResultSet rs = null ;) { |
3 |
4 | //code |
5 |
6 | } catch (SQLException | IOException e) { |
7 | e.printStackTrace(); |
8 | } |
Na cláusula catch do código acima, também esta uma nova funcionalidade do java 7 que nos possibilita tratar mais de uma exception num único bloco catch. Essa funcionalidade é útil pois evita códigos replicados em várias cláusulas catch.
Achei essas mudanças muito práticas e não vejo a hora de poder usá-las no dia-a-dia com java.
4) Parâmetros para construtor com Genéricos
Outro pequeno detalhe para tornar a linguagem Java mais prazerosa de se utilizar. Normalmente quando declaramos genéricos precisamos especificar o tipo que queremos no lado esquerdo (na declaração da variável) e no lado direito (no construtor). Isso não sera mais preciso, basta colocarmos os sinais de generics () do lado direito que automaticamente o compilador irá utilizar os objetos do lado esquerdo.
Outro pequeno detalhe para tornar a linguagem Java mais prazerosa de se utilizar. Normalmente quando declaramos genéricos precisamos especificar o tipo que queremos no lado esquerdo (na declaração da variável) e no lado direito (no construtor). Isso não sera mais preciso, basta colocarmos os sinais de generics () do lado direito que automaticamente o compilador irá utilizar os objetos do lado esquerdo.
1 | Map<Integer, String> mapa = new HashMap<>(); |
2 | mapa.put( 1 , "valor" ); |
Comentários
Postar um comentário