泛型学习一##
泛型学习一
1.1泛型的简单介绍
泛型是JDK1.5中的一项新特性,它的本质时参数化类型的应用,也就是说所操作的数据类型被指定为一个参数,在用到的时候在这指定具体的类型,这种参数类型可以用在类、接口和方法的创建中,分别成为泛型类、泛型接口和泛型方法。
泛型的英文单词式Generic,通用的、一般的,字面意思多种类型
java中的泛型:类型限定的意思
本质:把对象/集合里面元素的类型推迟到创建集合的时候
1.2泛型的作用
- 保证了类型安全
- 消除了强制类型转换
- 提高了代码的通用性
- 提高了性能
知识回顾:
基本数据类型包括:byte、long、float、double、char、boolean
引数据类型:类、接口类型、数组类型、枚举类型、注解类型
区别:基本数据类型在贝创建时,在栈上给其划分出一块内存,将数值直接存储在栈上
引用数据类型在被创建时,首先要在栈上给其引用分配一块内存,而对象的具体信息都存在堆内存上,然后由栈上面的引用指向堆中对象的地址。
ArrayList<E>和ArrayList<Integer>
以上面的两个泛型类型作为例子,
整个ArrayList为泛型类型
ArrayList中的E称为类型变量或者类型参数,
整个ArrayList称为参数化的类型
ArrayList中的integer称为类型参数的实例或者实际类型参数
ArrayList称为原始类型
1.3型的使用
<泛型类型> 数据类型:只能是引用类型
使用格式:数据类型<泛型的类型> 对象=new 数据类型<数据类型>()
//右边可以不写泛型,左边必须写泛型(jdk1.7泛型推断)
//标准格式
ArrayList<String> list=new ArrayList<String>();
//根据jdk1.7推断 等式右边可以不写泛型
ArrayList<String> list=new ArrayList ();
//泛型的数据类型只能是引用类型,即类、接口类型、数组类型、枚举类型、注解类型
ArrayList list=new ArrayList();
list.add("abc");
list.add(1); //这里的1被自动装箱为Integer类型,所以没报错
1.4型中T、E、K、V、?
简单粗暴的来介绍一下这五个字符的含义,说白都是Java泛型的通配符,换成其他字母结果也不会有影响,只是为了方便查看代码约定俗称按照一定的含义就选用这几个字母进行表示,这增加了代码的可读性。
- E:Element(在集合中使用,因为集合中存放的是元素) Collection
- T::Type(java 类)public T Test1(T t){}
- K:Key(键)Map<K,V>
- V:代表java键值中的Value
- ?:表示不确定的java类型,是类型通配符,代表所有类型。?不会进行类型推断