jdk5.0新しいプロパティ(汎用、列挙、静的インポート、自動梱包、強化for、可変パラメータ)

7602 ワード

1.汎用的な紹介
*汎用型を使用する理由
-集合で一般的に使用
**たとえば現在、文字列タイプの値を集合に入れています.この場合、この値を集合に入れた後、能力を失ったタイプはobjectタイプしかありません.
このとき、たとえばこの値をタイプ変換しようとすると、タイプ変換エラーが発生しやすくなります.この問題をどのように解決するかは、汎用型で解決できます.
*集合での汎用性の使用方法
-共通集合リストset map
-リストなどの汎用構文の集合
*汎用型ではオブジェクトとして書かれていますが、Stringではintのような基本的なデータ型は書けません(**)
**基本的なデータ型対応パッケージクラスの書き込み
byte -- Byte
short -- Short
int -- Integer
long -- Long
float -- Float
double -- Double
char   -- Character
boolean -- Boolean
*listで汎用を使用
Listの3つの実装ArrayList linkedList Vector
コード:
@Test
		public void testList() {
			List list = new ArrayList();
			list.add("aaa");
			list.add("bbb");
			list.add("ccc");


			//  list            
			//  for           for


			//  for  
			for(int i=0;i it = list.iterator();
			while(it.hasNext()) {
				System.out.println(it.next());
			}

*ジョブ1:ArrayList linkedList Vectorの3つの違い
*setで汎用を使用
コード:
//汎用セット使用
@Test
		public void testSet() {
			Set set = new HashSet();
			set.add("www");
			set.add("qqq");
			set.add("zzz");
			//set.add("qqq");
			//  set          
			//       for
			//    for  
			for (String s2 : set) {
				System.out.println(s2);
			}
			System.out.println("=================");
			//       
			Iterator it1 = set.iterator();
			while(it1.hasNext()) {
				System.out.println(it1.next());
			}
		}

*mapでは汎用型を使用
-map構造:key-valu形式
コード:
//mapで汎用を使う
	@Test
		public void testMap() {
			Map map = new HashMap();
			map.put("aaa", "111");
			map.put("bbb", "222");
			map.put("ccc", "333");
			//  map           
			// 1、     key,  key  value   get  
			// 2、  key value   
			//         
			//     key
			Set sets = map.keySet();
			//    key   set
			for (String key : sets) {
				//  key  value
				String value = map.get(key);
				System.out.println(key+" : "+value);
			}
			
			System.out.println("==============");
			//  key value   
			Set> sets1 = map.entrySet();
			//  sets1
			for (Entry entry : sets1) {
				//entry key value  
				String keyv = entry.getKey();
				String valuev = entry.getValue();
				System.out.println(keyv+" : "+valuev);
			}
		}

1.1、汎用的な使用方法
*配列を定義し、指定された位置の配列要素の交換を実現
*メソッドは論理的に同じですが、データ型が異なるため、この場合は汎用メソッドを使用します.
*/*
*汎用メソッドを使用するには、大文字でTを表すタイプを定義する必要があります.このTは任意のタイプを表します.
*値を返す前にvoidと書く
*========Tというタイプが定義されていることを示します
*以下でこのタイプを使用できますT
* */
public static  void swap1(T[] arr ,int a,int b) {
		T temp = arr[a];
		arr[a] = arr[b];
		arr[b] = temp;
	}

(2)練習:任意のタイプの配列を受け入れ、配列内のすべての要素を逆さまにする汎用的な方法を実現する.
コード#コード#
public static  void reverses(T[] arr1) {
		/*
		 *     :                 ,                  。。。。
		 *      /2
		 * */
		//    
		for(int i=0;i

  
.汎用消去
*まず、汎用型はソース・コード・フェーズにのみ存在し、コンパイル後に汎用型は存在しません.
1.2、汎用型のクラスでの使用(了解)
*クラスで直接使用できるタイプを定義します.
	* public class TestDemo04 {
	
	//          T   
	T aa;
	public void test11(T bb) {}
	
	//                 ,           
	public static void test12(A cc) {}
}

2、列挙の概要
*列挙とは?
**は一定の範囲内で値を取る必要があります.この値はこの範囲内のいずれかにすぎません.
**現実シーン:交通信号は3色ありますが、毎回3色のいずれかしか点灯しません
*キーワードenumを使用
** enum Color3 {
RED,GREEN,YELLOW;
}
*列挙の構造方法もプライベート
*特別列挙の操作(了解)
**列挙クラスには構造方法があります
**構築方法にはパラメータがあり、各インスタンスにパラメータを書く必要があります
**列挙クラスには抽象的な方法があります
**列挙された各インスタンスにおいて、この抽象的な方法を書き換える
2.1、列挙されたapiの操作
**name():列挙の名前を返します.
**ordinal():列挙された下付き、下付きは0から開始
**valueOf(Class enumType,String name):列挙されたオブジェクトを取得
**もう2つの方法があります.いずれもapiには含まれていません.コンパイル時に2つの方法を生成します.
***valueof(String name)変換列挙オブジェクト
***values()すべての列挙オブジェクト配列を取得
*練習:列挙オブジェクト、列挙オブジェクトの下付き、列挙オブジェクト名表示間の変換
-//列挙したオブジェクトを知って列挙名と下付きを得る
@Test
	public void test1() {
		//      
		Color100 c100 = Color100.RED;
		//    
		String name = c100.name();
		//     
		int idx = c100.ordinal();
		System.out.println(name+" "+idx);
	}

-//列挙の名前を知って列挙の対象と下付きを得る
	@Test
	public void test2() {
		String name1 = "GREEN";
		//    
		Color100 c1 = Color100.valueOf(name1);
		//    
		int idx1 = c1.ordinal();
		System.out.println(idx1);
	}

-//列挙の下付き文字を知って列挙したオブジェクトと名前を得る
@Test
	public void test3() {
		int idx2 = 2;
		//       
		Color100[] cs = Color100.values();
		//        
		Color100 c12 = cs[idx2];
		//       
		String name = c12.name();
		System.out.println(name);
	}

3.静的インポート(了解)
*コード内では、静的インポート方式、静的メソッドまたは定数を直接使用できます.
* import static XX.XX.xxx
* import static java.lang.System.out;
import static java.util.Arrays.sort;
**たとえば、Mathクラスに計算機を実装します.
4、自動梱包
*梱包
**基本的なデータ型をパッケージクラスに変換
*解体
**パッケージ類を基本データ型に変換
**
//自動梱包
Integer i = 10;
//自動分解
int m = i;
**jdk 1.4中はどのように箱を詰めて箱を分解することを実現します
-//jdk 1.4中は箱の取り外しを実現
public void test1() {
//箱詰め
Integer m = new Integer(10);
//箱を外す
int a = m.intValue();
}
**jdkは下位互換性あり
例えばjdk 1.4に書かれているコードは、この時点で5.0まで実行できます
**練習:下位互換
==実行結果doSomething(double m)が呼び出されます.
==まずjdk 1.4では必ずこのメソッドを呼び出します.次のメソッドを呼び出すと、タイプ変換が必要ですが、jdk 1.4自動梱包はできない
==jdkは下向き互換であるため、jdk 1である.4このメソッドをjdk 5で呼び出す.0でこのメソッドが呼び出されます
public static void main(String[] args) {
doSomething(10);
}
public static void doSomething(double m) {
System.out.println("double......");
}
public static void doSomething(Integer a){
System.out.println("integer.....");
}
**8つの基本的なデータ型に対応するパッケージクラス
* int --- Integer
* char--- Character
5、強化forサイクル(*****)
*構文for(遍歴した値:遍歴する集合){}
- for(String s : list) {
System.out.println(s);
}
*使用シーン:配列;Iterableインタフェースのセットを実装するには、強化forループを使用します.
*強化forループを使用したコレクション
List setはIteratorインタフェースを実現しているので、強化forループを使用することができます
mapでは拡張forループは使用できず,Iteratorインタフェースは実装されていないため,拡張forループは使用できない.
*強化forループの目的:反復器の代わりに
**強化forの最下位は反復器によって実現されます
6、可変パラメータ
*可変パラメータは、どのシーンに適用できますか.
**2個の数の加算を実現し、3個の数の加算4個の数の加算を実現する
--実装された複数のメソッドの場合、これらのメソッドの論理は基本的に同じであり、唯一異なるのは伝達されたパラメータの個数であり、可変パラメータを使用することができる.
*可変パラメータの定義方法データ型...配列の名前
*伝達されたパラメータを格納する配列として理解されます
-コード
/**
 *       
 * @author asus
 *
 */
public class TestDemo1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//int..num;
		add1(10,20);
		add1(10,20,30);
		add1(10,20,30,40);
	}
	
	public static void add1(int a,int...nums) {
		//nums       ,             
		//System.out.println(nums.length);
		int sum = 0;
		//    
		for(int i=0;i

*注意点
(1)可変パラメータはメソッドのパラメータリストに書く必要があり,単独で定義することはできない.
(2)メソッドのパラメータリストに可変パラメータが1つしかない
(3)メソッドのパラメータリストの可変パラメータは,パラメータの最後に置かなければならない.
- add1(int a,int...nums)