泛型
定义类、接口、方法时,同时声明了一个或者多个类型变量(如:<E>) ,称为泛型类、泛型接口,泛型方法、它们统称为泛型。
泛型的本质:把具体的数据类型作为参数传给类型变量。
泛型类
修饰符 class 类名称 <泛型标识> {
private 泛型标识 /*(成员变量类型)*/ 变量名;
.....
}
}
注:尖括号 <> 中的 泛型标识被称作是类型参数,用于指代任何数据类型。
泛型标识是任意设置的(如果你想可以设置为 Hello都行),Java 常见的泛型标识以及其代表含义如下:
T :代表一般的任何类。
E :代表 Element 元素的意思,或者 Exception 异常的意思。
K :代表 Key 的意思。
V :代表 Value 的意思,通常与 K 一起配合使用。
S :代表 Subtype 的意思
泛型接口
修饰符 interface 接口名<类型变量,类型变量,…> {
}
例:
public interface Data<T> {
void add(T t);
ArrayList<T> getByName(String name);
}
public class TeacherData implements Data<Teacher>{//点alt和回车
@Override
public void add(Teacher teacher) {
}
@Override
public ArrayList<Teacher> getByName(String name) {
return null;
}
}//就是将上面的T代入teacher
泛型方法
修饰符 <类型变量,类型变量,…> 返回值类型 方法名(形参列表) {
}
public static <T> void test(T t){
}
通配符:就是 “?” ,可以在“使用泛型”的时候代表一切类型; E T K V 是在定义泛型的时候使用。
上下限:
泛型上限: ? extends Car: ? 能接收的必须是Car或者其子类 。
泛型下限: ? super Car : ? 能接收的必须是Car或者其父类。
注意事项:
泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除。
泛型不支持基本数据类型,只能支持对象类型(引用数据类型)。
API
1.Object类
1、Object中toString方法的作用是什么?存在的意义是什么?
基本作用:返回对象的字符串形式。 存在的意义:让子类重写,以便返回子类对象的内容。
2、Object中equals方法的作用是什么?存在的意义是什么?
基本作用:默认是比较两个对象的地址是否相等。 存在的意义:让子类重写,以便用于比较对象的内容是否相同。
3.clone
错误:一定要接口
2.Objects
1.equals
对于未知是否为空指针的量,用objects比较即第二个,因为第一个会出bug,空指针异常
3.包装类
把基本类型的数据包装成对象。
public class test {
public static void main(String[] args) {
Integer a2 = Integer.valueOf(12);
//自动装箱:基本数据类型可以自动转换为包装类型
Integer a3 = 12;
//自动装箱:基本数据类型可以自动转换为包装类型
int a4 = a3;
//泛型和集合不支持基本数据类型,只能支持引用数据类型
//ArrayList<int> list =new ArrayList<int>();
ArrayList<Integer> list = new ArrayList<>();
list.add(12);//自动装箱
list.add(13);
int rs = list.get(1);
System.out.println("----------------");
//1.把基本类型的数据转换成字符串
Integer a = 23;
String rs1 = Integer.toString(a);
System.out.println(rs1 + 1);
String rs2 = a.toString();
System.out.println(rs2 + 1);
String rs3 = a +"";
System.out.println(rs3 + 1);
//2.可以把字符串类型的数据转换成数值本身对应的数据类型
String ageStr ="29";
int ageI = Integer.valueOf(ageStr);
System.out.println(ageI + 1);
String scoreStr = "99.5";
double score =Double.parseDouble(scoreStr);
System.out.println(score + 0.5);
}
}