目录
前言
泛型
1.泛型的目的
2.泛型存在的意义和注意事项:
3.擦除机制
4.泛型的边界
5.泛型方法:
包装类:
前言
只要知道《》是啥意思,其他了解即可
泛型的上界
通配符简单知道就行
泛型
1.泛型的目的
指定当前的容器,要持有什么类型的对象,让编译器做检查
class MyArray{
public Object[]array=new Object[10];
public Object getPos(int pos){
return array[pos];
}
public void setVal(int pos,Object val){
this.array[pos]=val;
}
}
public class Test {
public static void main(String[] args) {
MyArray myArray=new MyArray();
myArray.setVal(0,19);
myArray.setVal(1,"hello");
String s=(String) myArray.getPos(1);
System.out.println(s);
}
2.泛型存在的意义和注意事项:
1.<>里面指定了什么类型,说明此时这个类里面,只能放这个数据类型的数据
MyArray<String> myArray=new MyArray<String>();
MyArray<Integer>myArray1=new MyArray<Integer>();
2.当指定类型之后,编译器会根据你指定类型的参数来进行检查(检查类型)
myArray.setVal(1,"hello");
3.当取元素的时候,不需要进行强转了(强转)
myArray1.getPos(1);
4.java当中不可以new 泛型类型数组
public T[]array=new T[10];//error
5.泛型的<>当中一定是引用类型的数据
class MyArray<T>{
public T[]array=(T[])new Object[10];
public T getPos(int pos){
return array[pos];
}
public void setVal(int pos,T val){
this.array[pos]=val;
}
}
public class Test {
public static void main(String[] args) {
MyArray<String> myArray=new MyArray<String>();
myArray.setVal(1,"hello");
String s=(String) myArray.getPos(1);
System.out.println(s);
MyArray<Integer>myArray1=new MyArray<Integer>();
myArray1.setVal(0,19);
}
泛型是如何编译的
3.擦除机制
在编译的时候,把泛型T擦除为了Object
编译时期的一种机制,运行期间没有泛型这个概念
正确使用泛型(了解即可)
4.泛型的边界
泛型的上界,没有泛型的下界
1.
泛型接口,这个T 就是你要比较的类型
5.泛型方法:
方法限定符 <类型形参列表> 返回值类型 方法名称(形参列表) { ... }
class Alg2{
public <T extends Comparable<T> > T findMaxVal(T[]array){
T maxVal=array[0];
for (int i = 0; i <array.length ; i++) {
if(array[i].compareTo(maxVal)>0){
maxVal=array[i];
}
}
return maxVal;
}
}
通配符的上届一般用于获取元素 <? extend Integer>
通配符的下界一般用于添加元素<? super Integer>
包装类:
装箱和拆箱
装箱:基本变成引用(三种常见方式)
Integer integer=a;//自动装箱,底层调用的还是Interger.valueof
//显示装箱
Integer integer2=new Integer(a);
Integer integer3=Integer.valueOf(a);
拆箱:
public static void main(String[] args) {
int a = 10;
Integer integer = a;
int val = integer;//自动拆箱
//显示拆箱
int val2 = integer.intValue();
double val3 = integer.doubleValue();
输出true,false,理由:
设计到自动装箱,底层相当于缓存,-128,127时从缓存中取对象,不在时候new