向搜索引擎提交网站地图,wordpress商业模板破解,相册模板,网络优化推广公司哪家好文章目录 一、包装类1.基本数据类型和对应的包装类2.自动装箱和自动拆箱3.手动装箱和手动拆箱 二、什么是泛型三、泛型的使用四、裸类型#xff08;Raw Type#xff09;五、泛型是如何编译的六、泛型的上界七、泛型方法总结 一、包装类
在了解泛型之前我们先了解什么是包装类… 文章目录 一、包装类1.基本数据类型和对应的包装类2.自动装箱和自动拆箱3.手动装箱和手动拆箱 二、什么是泛型三、泛型的使用四、裸类型Raw Type五、泛型是如何编译的六、泛型的上界七、泛型方法总结 一、包装类
在了解泛型之前我们先了解什么是包装类在Java中由于基本类型不是继承自Object为了在泛型代码中可以支持基本类型Java给每个基本类型都对应了一个包装类型
1.基本数据类型和对应的包装类
基本数据类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean
除了Integer和Character其余基本类型的包装类都是首字母大写
2.自动装箱和自动拆箱
public class Test {public static void main(String[] args) {int a 10;Integer i a;//自动装箱 把一个基本数据类型转变为包装类型System.out.println(i);Integer j new Integer(20);int b j;//自动拆箱 把一个包装类型转变为基本数据类型System.out.println(b);}
}3.手动装箱和手动拆箱
public class Test {public static void main(String[] args) {int a 10;Integer i Integer.valueOf(a);//手动装箱System.out.println(i);Integer j new Integer(20);int b j.intValue();//手动拆箱System.out.println(b);}
}二、什么是泛型
泛型是在JDK1.5引入的新的语法通俗讲泛型就是适用于许多许多类型。从代码上讲就是对类型实现了参数化泛型的主要目的就是指定当前的容器要持有什么类型的对象让编译器去做检查 语法
class 泛型类名称类型形参列表 {
// 这里可以使用类型参数
}
class ClassNameT1, T2, ..., Tn {
}
class 泛型类名称类型形参列表 extends 继承类/* 这里可以使用类型参数 */ {
// 这里可以使用类型参数
}
class ClassNameT1, T2, ..., Tn extends ParentClassT1 {
// 可以只使用部分类型参数
}例子如下所示
class MyArrayT {public Object[] array new Object[10];//1public void setValue(int pos,T val) {array[pos] val;}public T getValue(int pos) {return(T)array[pos];}
}
public class Test {public static void main(String[] args) {MyArrayInteger myArray new MyArray();//2myArray.setValue(0,10);myArray.setValue(1,20);myArray.setValue(2,30);int val myArray.getValue(0);//3System.out.println(val);MyArrayString myArray1 new MyArray();myArray1.setValue(0,hello);myArray1.setValue(1,word);String ret myArray1.getValue(0);System.out.println(ret);}
} 1.类名后的 T 代表占位符表示当前类是一个泛型类 【规范】类型形参一般使用一个大写字母表示常用的名称有 E 表示 Element K 表示 Key V 表示 Value N 表示 Number T 表示 Type S, U, V 等等 - 第二、第三、第四个类型 2. 注释1处不能new泛型类型的数组 3. 注释2处类型后加入 Integer 指定当前类型 4. 注释3处不需要进行强制类型转换
三、泛型的使用
语法:
泛型类类型实参 变量名; // 定义一个泛型类引用
new 泛型类类型实参(构造方法实参); // 实例化一个泛型类对象示例如下
MyArrayInteger myArray new MyArrayInteger();//此处的类型实参可以省略注意 泛型只能接受类所有的基本数据类型必须使用包装类
四、裸类型Raw Type
裸类型是一个泛型类但没有带着类型实参如下所示
MyArray myArray new MyArray();注意 我们不要自己去使用裸类型裸类型是为了兼容老版本的 API 保留的机制
五、泛型是如何编译的
擦除机制 在编译的过程当中将所有的T替换为Object这种机制我们称为擦除机制 Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息
六、泛型的上界
在定义泛型类时有时需要对传入的类型变量做一定的约束可以通过类型边界来约束 语法
class 泛型类名称类型形参 extends 类型边界 {
...
}示例
public class MyArrayE extends Number {
...
}只接受 Number 的子类型作为 E 的类型实参 复杂示例
public class MyArrayE extends ComparableE {
...
}E必须是实现了Comparable接口的
七、泛型方法
定义语法
方法限定符 类型形参列表 返回值类型 方法名称(形参列表) {
...
}示例
public class Util {//静态的泛型方法 需要在static后用声明泛型类型参数public static E void swap(E[] array, int i, int j) {E t array[i];array[i] array[j];array[j] t;}
}总结
1.泛型是将数据类型参数化进行传递 2.使用 T 表示当前类是一个泛型类。 3.泛型目前为止的优点数据类型参数化编译时自动进行类型检查和转换