ディレクトリ
2.2梱包、包装の使用、(ボクシング)とアンボクシング(ボックス化解除)
1.ジェネリック
ジェネリッククラスへの参照1.1
質問:シンプルなシーケンシャルintデータのみが保存されます、我々は注文表を保存する必要がある場合は人型オブジェクト参照を参照し、解決する方法でしょうか?あなたはBookオブジェクトへの参照ポイントを保存する必要がある場合はそれをタイプ?
回答: 1.まず、我々は、多状態の学習過程における前提を知っているオブジェクトのサブクラスを指すことができ、基本クラスを参照してください。
2.第二に、私たちも知られているJavaオブジェクトは、すべてのクラスの親です。
だから、これらの問題を解決するために、私たちは自然に解決策を考え、Object型として定義され、当社の受注テーブル型の要素はので
、参照の私達のオブジェクトタイプは、タイプの人のオブジェクトを指すか、タイプブックのオブジェクトを指し示すことができます
public class MyArrayList {
private Object[] array; // 保存顺序表的元素,即 Object 类型的引用
private int uesdSize; // 保存顺序表内数据个数
public void add(Object o) { 尾插 }
public Object get() { 获取最后位置的元素 }
...
}
レガシー:今MyArrayListあなたがへの参照のいずれかのタイプを追加するために行うが、次のコードは、問題を作成するに遭遇することもできますが
MyArrayList books = new MyArrayList();
books.add(new Book);
// 将 Object 类型转换为 Person 类型,需要类型转换才能成功
// 这里编译正确,但运行时会抛出异常 ClassCastException
Person person = (Person)books.get();
問題は影響小さく、早く暴露しました。コンパイル時の問題は、開発者だけがすべてのソフトウェアのユーザーが操作中にエラーが発生しますことを感じるようになります
熊エラーのリスク
我々が使用解消の型変換中に1. 2.コンパイル型チェックを高めるためのメカニズムを必要とするパンをタイプが誕生しました!
1.2一般的な定義
// 1. 尖括号 <> 是泛型的标志
// 2. T 是类型变量(Type Variable),变量名一般要大写
// 3. T 在定义时是形参,代表的意思是 MyArrayList 最终传入的类型,但现在还不知道
public class MyArrayList<T> {
public T[] elems;
public int usedSize;
public MyArrayList() {
//this.elems = new T[10];错误
this.elems = (T[])new Object[10];
this.usedSize = 0;
}
public void add(T data) {
this.elems[this.usedSize] = data;
this.usedSize++;
}
public T get() {
return this.elems[this.usedSize-1];
}
...
}
注:一般的なクラス変数の複数の種類がある場合があり、カンマで区切られました
MyArrayListは、一般的なクラスです
<T>:Tは、それが唯一のプレースホルダであり、現在のクラスは、一般的なクラス識別子であります
単純な原理行動の背後にあると倍の背後に1.3ジェネリック
1. ジェネリック何の一般的な概念、すなわち、動作中に存在しない、コンパイル時にアクションのメカニズムです。
私たちは、上記のことを実行中2.汎用コード、オブジェクトの使用効果を達成するためには、(これは非常に正確ではない、未来は説明します)。
1.4ジェネリッククラス
// 定义了一个元素是 Book 引用的 MyArrayList
MyArrayList<Book> books = new MyArrayList<Book>();
books.add(new Book());
// 会产生编译错误,Person 类型无法转换为 Book 类型
books.add(new Person());
// 不需要做类型转换
Book book = book.get();
// 不需要做类型转换
// 会产生编译错误,Book 类型无法转换为 Person 类型
Person person = book.get();
上記のコードを通して、私たちはジェネリッククラスを使用する方法を見ることができます:ちょうど背後にあるすべての角括弧の種類、および角括弧で真のクラスである
Tの最後のタイプを見ることができるである、タイプ。
注:タイプTの書籍のみを想像することができますが、実際にはT型やオブジェクト
1.5一般的なトラップ
- ジェネリック型パラメータにすることはできませんシンプルなタイプ。それはでなければならないラッパークラスのオブジェクト
- MyArrayList <整数> myArrayList3 =新しいMyArrayList <>(); 错误
- これは、配列T []の新しいジェネリックタイプにすることはできませんT [] T ELEM =新しい[10] 。
- ジェネリック型パラメータは、組成物の種類に関与していません
1.6一般的な意味
1型チェックを自動的に実行することができます
2.自動型変換
2.パッケージ
直接2.1基本データ型とパッケージとの対応関係
基本データ型 | ラッパークラス |
バイト | バイト |
ショート | ショート |
int型 | 整数 |
長いです | 長いです |
浮く | 浮く |
ダブル | ダブル |
CHAR | キャラクター |
ブーリアン | ブーリアン |
基本的に加えて、大文字の最初の文字を入力整数と文字
2.2梱包、包装の使用、(ボクシング)とアンボクシング(ボックス化解除)
//int -> Integer 自动装包/装箱
Integer a = 10;
System.out.println(a);
//int -> Integer 手动装包/装箱
Integer b = Integer.valueOf(20);
int c = a;//自动拆包/拆箱 默认拆成整型:intValue
double d = a.doubleValue();//手动拆包/拆箱 拆成double:doubleValue
System.out.println(c);
System.out.println(d);
注:オートボクシングと自動アンボクシングは、コンパイル時に仕事にするメカニズムです