Rozdíly mezi Java SE 6 a 7 (1)

Díl 1

Programovací jazyk Java je na světě už více než 20 let. Za tu dobu získal velkou oblibu programátorů. Za dobu svojí existence Java dostála celé řady změn, které se kumulují vždy ve velkém updatu mezi jednotlivými verzemi.

Dnes se budeme bavit o rozdílech mezi verzemi Java SE 6 a Java SE 7. Pochopitelně se jedná o celou řadu změn, které tvoří soubor nových funkcí. Každá verze Javy je nejprve vyvíjena pod kódovým označením a pod odpovídajícím požadavkem na změnu specifikace (JSR – Java Specification Request), jenž je součástí Java Comunity Precess, procesu vyvíjení jazyka Java. Zde uvádíme ty nejzásadnější změny mezi oběma verzemi.

Stručná historie Java SE 6

Java SE 6, která se objevila v roce 2006, tedy dva roky po uvedení předchozí verze, nepřinesla zrovna revoluční technické funkce. To je s velkou pravděpodobností způsobeno krátkou prodlevou mezi oběma verzemi. Kódové označení Javy 6 bylo Mustang a vyvíjela se pod označením JSR 270. Poprvé se z verze jazyka Java odstraňuje poslední nula, takže po JSR 270 přichází právě Java 1.6 (interní verzování pro vývojáře je nadále 1.6.0).

Novinky skriptování

Šestá verze jazyku Java se dočkala nového API pro skriptování (Scripting). Umožňuje podporu Scripting Language Support spolu s implementací Java Scriptu.

Vylepšení knihoven a core jazyka

Vylepšen výkon core platformy a grafické knihovny Swing. Vylepšení podpory webových služeb JAX-WS (Java API pro XML web services), převodu Java objektu do WSDL (Jazyk popisující webovou službu). Podpora JDBC 4.0. Vylepšení Swingu o SwingWorker a pravý DoubleBuffering (V Java 1.2 v roce 1998 byl v grafické knihovně také double buffering a fungoval celkem obstojně). Vylepšení algoritmu pro Garbage Collection.

Kompilátor

S novou verzí jsme se dočkali i vylepšeného kompilátoru (JSR 199), díky němuž lze volat kompilátor (překladač) přímo z programu. Největší změnou ale nebyla technická stránka, nýbrž otázka právní. Společnost Sun Microsystems totiž vydala implementaci jazyka Java s licencí GNU GPL ‒ je tedy možné jej volně šířit.

Java SE 7

Na sedmou verzi bylo třeba počkat celých pět let (rok 2011). Toto čekání ale bylo na místě ‒ verze 7 totiž přinesla celou řadu ryze technických novinek, které výrazně usnadnily práci s Javou.

Invokedynamic a nová knihovna java.lang.invoke

Díky Invokedynamic byla usnadněna implementace dynamických jazyků do JVM (virtuální stroj, na němž lze spustit programy a skripty), od této chvíle JVM dokáže díky nové instrukční sadě a dynamickému volání metod spouštět dynamické jazyky, jako jsou JavaScript, Groovy nebo Ruby. Jelikož je Java staticky typovaný jazyk, provádí kontrolu typů v době kompilace. To znamená, že neumožní kompilaci, pokud argumenty metod nejsou správných typů. Následující ukázka obsahuje ukazuje statické typování, typy jsou zobrazeny tučně:

Kód

import java.util.Date;

public class HelloWorld {

public static void main(String[] argv) {
    String hello = "Hello ";
    Date currDate = new Date();
    for (String a : argv) {
        System.out.println(hello + a);
        System.out.println("Today's date is: " + currDate);
    }
  }
}

Dynamický programovací jazyk naproti tomu provádí kontrolu typů až v době spuštění, typicky v době kompilování totiž nemá dostatek informací o typech proměnných. Před JVM verze 7 však nebylo možné tuto vlastnost efektivně implementovat.

Ukázka Hello World v Ruby:

Kód

#!/usr/bin/env ruby
require 'date'

hello = "Hello "
currDate = DateTime.now
ARGV.each do|a|
  puts hello + a
  puts "Date and time: " + currDate.to_s
end

Všimněte si, že žádná proměnná není typově deklarována.

String ve Switch Statement

Ve Switch Statement lze nově používat i textové řetězce. V minulosti šlo použít pouze typ int, případně si pomocí výčtovým typem enum. V praxi díky Javě 7 získáte oproti použití if-then-else efektivnější bajt kód. Díky tomu budete moct pracovat rychleji a váš kód bude o poznání kratší.

Kód

public static void main(String[] args) {
    for (String argument : args) {
        switch (argument) {
            case "-verbose":
            case "-v":
                verbose = true;
            break;
            case "-log":
                logging = true;
            break;
            case "-help":
                displayHelp = true;
            break;
            default:
                System.out.println("Illegal command line argument");
        }
    }
}

Při používání řetězců však dávejte pozor na to, že řetězce mohou obsahovat NULL a na velikosti písmen v řetězci. Případná hodnota NULL vyvolá exception NullPointerException.

Zdroj

OCA OCP Java SE Programmer I & II Study Guide, Sierra K., Bates B.
Java 7 New Features Cookbook, Richard and Jennifer Reese
docs.oracle.com/javase

Příště: Trywith-resources a AssertionError.








Doporučujeme

Internet pro vaši firmu na míru