Loops
Uma boa melhoria de Java é que agora os loops de repetição foram adaptados para o uso com arrays. Exemplo na versão antiga de Java:
public class Test_Old_Java
{
public static void main(String args[])
{
String[] string = {"www.","viva","o","linux",".com",".br","\n"};
for(int i=0; i < string.length; i++)
{
System.out.print(string[i]);
}
}
}
No JDK 1.5 agora pode ser assim:
public class Test_New_Java
{
public static void main(String args[])
{
String[] string = {"www.","viva","o","linux",".com",".br","\n"};
for(String i:string)
{
System.out.print(i);
}
}
}
Apesar de ter mostrado estes exemplos com variáveis tipo objeto, esta nova sintaxe de laço funciona também para tipos primitivos.
Autoboxing/Unboxing
Antes do JDK 1.5, a conversão entre os tipos primitivos e tipos objetos não eram automáticas:
public class Test_Old_Java
{
public static void main(String args[])
{
Integer temp = new Integer(15);
int k = temp.intValue();
}
}
Na nova versão de Java fica bem mais simples e agora é automático:
public class Test_New_Java
{
public static void main(String args[])
{
Integer temp = 15;
int k = temp;
}
}
Collections
Novas coleções foram adicionadas ao pacote java.util de Java. Tais como Queue, BlockingQueue, ConcorrentMap e muitas outras existentes se tornaram genéricas como Vector, Enum, Hashtable, Stack, TreeSet, etc. Também foram adicionadas muitas classes para se utilizar com o novo pacote concurrency de Java. A classe Array ganha novos métodos como hashCode e toString. A classe Boolean agora implementa a interface Comparable, dentre muitas outras modificações.
Static Import
Agora é possível importar métodos e constantes estáticas. Antes quando se
utilizava dos nomes do pacotes para fazer chamada aos métodos e constantes, tornava-se o código mais complexo e de difícil interpretação.
public class Test_Old_Java
{
public static void main(String args[])
{
System.out.println(Math.sqrt(Math.PI));
}
}
Já na nova versão de java ficaria assim:
import static java.lang.Math.*;
import static java.lang.System.*;
public class Test_New_Java
{
public static void main(String args[])
{
out.println(sqrt(PI));
}
}
Scanner
Nas versões anteriores de Java 1.5 era extremamente complicado, ou quase impossível criar programas que recebiam valores de variáveis pelo terminal. Agora no novo Java a solução até que enfim apareceu.
Se você fosse criar um programa de Java para receber parâmetros de variáveis pelo console, tinha obrigatoriamente que dominar Streams. Além de criar um pacote de classes muito grande para atender todos os tipos de variáveis. Ou então desistia da idéia de receber dados pelo console e utilizava da interface gráfica de Java.
import java.swing.JOptionPane;
public class Test_Old_Java
{
public static void main(String args[])
{
String temp = JOptionPane.showInputDialog("Digite o número:");
int number = Integer.parseInt(temp);
int sum = number * number;
JOptionPane.showMessageDialog("O quadrado de "+number+" é: "+sum);
}
}
Agora basta utilizar a nova classe Scanner, que faz parte o pacote java.util, que faz parte do Java 1.5 e está solucionado o problema.
import java.util.Scanner;
public class Test_New_Java
{
public static void main(String args[])
{
Scanner input = new Scanner(System.in);
System.out.print("Digite o número: ");
int number = input.nextInt();
System.out.print("O quadrado de "+number+" é: "+number*number);
}
}
Support for Enviromment Variables
No Java existe um método que retorna o conteúdo das variáveis de ambiente do sistema operacional. Antes deprecated, o método getenv() aceita como parâmetro uma String e pode retornar uma String ou um Map.
public class Test
{
public static void main(String args[])
{
String temp = System.getenv("PATH");
System.out.print(temp);
}
}
Threads
A classe java.lang.Thread foi modificada para acomodar novas funcionalidades, como a enumeração Thread.State, que define o estado de execução da Thread como NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING e TERMINATED, além do novo método getState(), que retorna o estado da Thread.