JDK 5の新特性

6701 ワード

Java 5
Java 5開発コードはTiger(虎)で、2006-09-30に発行されます.
特性リスト
1.汎型2.列挙3.自動箱開け込み4.可変パラメータ5.コメント6.foreachサイクル(拡張for/in)7.静的導入8.フォーマット(System.out.printelサポート%s%d)などのフォーマットの出力9.スレッドフレーム/データ構造JUC.Araysツール類/StringBuider/instrument
1.泛型
いわゆるタイプ消去とは、Javaソースの范型情報はコンパイルの前の段階にとどまることができますが、コンパイル後のバイトコードファイルは范型情報を保存しないことです.つまり、モデル情報はコンパイル時にすべて削除されます.范タイプのパラメータはObjectタイプに置き換えられ、実際の使用時に指定されたターゲットデータタイプに強制的に変換されます.C++のテンプレートは、コンパイル時にテンプレートタイプのタイプパラメータを転送された指定データタイプに応じて対応するターゲットコードを生成します.
Map squares = new HashMap();
ワイルドカードの種類:unchecked警告を避けるために、疑問符はどのタイプでも受け入れることができるという意味です.
public class Jdk5 {
    public static void main(String[] args) {
        //1.  
        List list = new ArrayList<>();
        list.add("string1");
        list.add("string2");
        list.add("string3");
        PrintStream ps = System.out;
        try {
            printList(list,ps);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void printList(List> list, PrintStream out) throws IOException {
        for (Iterator> i = list.iterator(); i.hasNext(); ) {
            out.println(i.next().toString());
        }
    }
}
制限タイプは最高タイプのextens Eを制限できます.下に限定するとEとそのサブタイプしかできません.
public static 

Object doObj(Person p){ return new Object(); }

制限タイプ制限最低タイプsuper E>:上向きに限定すると、Eとその親のみとなります.
List super String> list = new ArrayList ();
list1.add("11");
System.out.println(list);
2.列挙
EnumMap
public enum Day {
    MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
}
public class TestEnumMap {

    public static void main(String[] args) {

        Day today = Day.FRIDAY;
        //  Day  EnumMap
        EnumMap enummap = new EnumMap(Day.class);
        //     key   null,     values   null
        enummap.put(Day.MONDAY, "work work");
        //          ,               
        enummap.put(Day.TUESDAY, "work work");
        enummap.put(Day.WEDNESDAY, "work work");
        enummap.put(Day.THURSDAY, "work work");
        enummap.put(Day.FRIDAY, "work work");
        enummap.put(Day.SATURDAY, "have fun");
        enummap.put(Day.SUNDAY, "have fun");

        System.out.println(enummap);
        // get    key          
        String job = (String) enummap.get(today);
        System.out.println("job is:" + job);

    }

}
印刷
{MONDAY=work work, TUESDAY=work work, WEDNESDAY=work work, THURSDAY=work work, FRIDAY=work work, SATURDAY=have fun, SUNDAY=have fun}
job is:work work
EnumSetエニュメレーションSetの値は重複できません.
public class JDK5TestEnum {
    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add(Day.FRIDAY);
        list.add(Day.SUNDAY);
        list.add(Day.MONDAY);
        list.add(Day.MONDAY);
        System.out.println(list);
        EnumSet set = EnumSet.copyOf(list);
        System.out.println(set);
    }
}
印刷
[FRIDAY, SUNDAY, MONDAY, MONDAY]
[MONDAY, FRIDAY, SUNDAY]
switch列挙
public class JDK5TestEnum {
    public static void main(String[] args) {
        Day data = Day.MONDAY;
//        String data = "MONDAY";
        switch (data) {
            case MONDAY:
                System.out.println(data);
                break;
            case FRIDAY:
                System.out.println(data);
                break;
            case SATURDAY:
                System.out.println(data);
                break;
            default :
                break;
        }
    }
}
3.自動箱詰め
prmitiveタイプを対応するwrapperタイプに変換します.Boolean、Byte、Shot、Chracter、Integer、Long、Float、DoubleはIntegerを例にしています.
public class JDK5Integer {
    public static void main(String[] args) {
        Integer i = new Integer(129);
        int j = 129;
        System.out.println(i == j);
        System.out.println(i.equals(j));
    }
}
equalsは自動的に箱に入れて箱を外すことができます.
4.可変パラメータ
public class JDK5Integer {
    public static void main(String[] args) {
        print("hahah","aafasf","asdasdas","greger");

    }
    public static void print(String str1,String ... strings) {
        System.out.println(str1);
        for (int i =0; i < strings.length; i++) {
            System.out.println(strings[i]);
        }
    }
}
注意してください.可変パラメータは最後の要素にしか現れません.同じ方法のパラメータは最大で二つの可変パラメータしかありません.また、書き換えの実現方法を継承する時は、統一パラメータの書き方に統一します.
5.コメント
Inheitedは、この注釈がクラスのサブクラスの継承方法などに役立つかどうかを示しています.
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface InProgress { }
TargetタイプRentationは、コンパイルされたクラスファイルの中に保持されていますか?それとも実行中に読み取り可能ですか?
6.拡張forサイクルfor/in
for/inサイクルができないこと:(1)index(2)集合コンマスティッチングを同時に取得した時、最後の(3)エルゴードを削除しながら要素を削除します.
public class JDK5Integer {
    public static void main(String[] args) {
        print("hahah","aafasf","asdasdas","greger");

    }
    public static void print(String str1,String ... strings) {
        System.out.println(str1);
        for(String str : strings){
            System.out.println(str);
        }
    }
}
7.静的導入
静的導入とは、つまり静的導入後、直接にこの定数を書いて、類名を使って呼び出さなくてもいいです.
import static  java.lang.Math.PI;

public class JDK5Integer {
    public static void main(String[] args) {
        System.out.println(PI);
    }
}
しかし、一般的に静的なインポートは使用されません.
8.print出力フォーマット
C言語ではフォーマット出力ができます.JavaはJDK 5.0からも制限されていますが、あまり使われていません.
規定の文字%d 10進数の符号整数%u 10進数の符号なし整数%f浮動小数%s文字列%c単一文字%pポインタの値%e指数形式の浮動小数%xをフォーマットします.%Xは符号なしで16進数で表される整数%0は符号なしで8進数で表される整数%gは自動的に適切な表現法を選択します.
9.同時サポート(JUC)
詳細はマルチスレッドで詳しく説明します.
10.アラズ、Queue、スレッドセキュリティStringBuider
Arays工具類
Arrays.sort(myArray);
Arrays.toString(myArray)
Arrays.binarySearch(myArray, 98)
Arrays.deepToString(ticTacToe)
Arrays.deepEquals(ticTacToe, ticTacToe3)
Queueは集合のadd/remove操作を避けて、offer、poll操作(異常を投げない)Queueインターフェースを使ってList、Setと同じレベルにして、Collectionインターフェースを継承しました.Linked ListはDequeインターフェースを実現しました.
public class QueueTest {
    public static void main(String[] args) {
        //       queue
        Queue q = new LinkedList();
        q.add("213");
        q.add(1233);
        System.out.println(q.poll());
    }
}
StringBuiderスレッドの安全な文字列操作クラスStringBuiderスレッドの安全でない文字列操作クラス