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
コード:
*ジョブ1:ArrayList linkedList Vectorの3つの違い
*setで汎用を使用
コード:
//汎用セット使用
*mapでは汎用型を使用
-map構造:key-valu形式
コード:
//mapで汎用を使う
1.1、汎用的な使用方法
*配列を定義し、指定された位置の配列要素の交換を実現
*メソッドは論理的に同じですが、データ型が異なるため、この場合は汎用メソッドを使用します.
*/*
*汎用メソッドを使用するには、大文字でTを表すタイプを定義する必要があります.このTは任意のタイプを表します.
*値を返す前にvoidと書く
*========Tというタイプが定義されていることを示します
*以下でこのタイプを使用できますT
* */
(2)練習:任意のタイプの配列を受け入れ、配列内のすべての要素を逆さまにする汎用的な方法を実現する.
コード#コード#
.汎用消去
*まず、汎用型はソース・コード・フェーズにのみ存在し、コンパイル後に汎用型は存在しません.
1.2、汎用型のクラスでの使用(了解)
*クラスで直接使用できるタイプを定義します.
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()すべての列挙オブジェクト配列を取得
*練習:列挙オブジェクト、列挙オブジェクトの下付き、列挙オブジェクト名表示間の変換
-//列挙したオブジェクトを知って列挙名と下付きを得る
-//列挙の名前を知って列挙の対象と下付きを得る
-//列挙の下付き文字を知って列挙したオブジェクトと名前を得る
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個の数の加算を実現する
--実装された複数のメソッドの場合、これらのメソッドの論理は基本的に同じであり、唯一異なるのは伝達されたパラメータの個数であり、可変パラメータを使用することができる.
*可変パラメータの定義方法データ型...配列の名前
*伝達されたパラメータを格納する配列として理解されます
-コード
*注意点
(1)可変パラメータはメソッドのパラメータリストに書く必要があり,単独で定義することはできない.
(2)メソッドのパラメータリストに可変パラメータが1つしかない
(3)メソッドのパラメータリストの可変パラメータは,パラメータの最後に置かなければならない.
- add1(int a,int...nums)
*汎用型を使用する理由
-集合で一般的に使用
**たとえば現在、文字列タイプの値を集合に入れています.この場合、この値を集合に入れた後、能力を失ったタイプは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)