1.泛型的简介
(1)优点:JDK5以前,对象保存到集合中就会失去其类型特性,取出时通常要程序员手工进行类型的强制转换,这样不可避免就会引发程序的一些安全性问题。
(2)应用在集合
用于指定集合元素的类型
。
- 常用集合 list set map
- 在泛型里面应该指定一个对象,String等。 不能写基本的数据类型,应该写基本的数据类型对应包装类。
(3)应用在方法
用于不同类型的数据执行相同的操作
。
void之前 <T>:表示定义了一个类型 这个类型是 T。后面就可以使用这个类型了。
public static <T> void swap1(T[] arr ,int a,int b) {
T temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
(4)应用在类(了解)
在一个类上定义一个类型,这个类型可以在类里面直接使用
public class TestDemo04<T> {
//在类里面可以直接使用T的类型
T aa;
public void test11(T bb) {}
//写一个静态方法 在类上面定义的泛型,不能再静态方法里面使用
public static void test12(A cc) {} // 错误
public static <A> void test12(A cc) {} // 正确,需要方法自己定义一个新泛型
}
(5)泛型只是出现在源代码阶段,当编译之后泛型不存在了
2.枚举enum
枚举对象具有以下方法:
name()
:返回枚举的名称
ordinal()
:枚举的下标,下标从0开始
valueOf(Class<T> enumType, String name)
:得到枚举的对象
枚举类具有以下方法:
valueof(String name)
转换枚举对象
values()
获得所有枚举对象数组
3.增强for循环
语法:for(遍历出来的值 : 要遍历的集合) {}
-
使用场景: 数组;
实现Iterable接口
的集合可以使用增强for循环 -
在集合上使用增强for循环遍历
list set 实现了Iterator接口,所以可以使用增强for循环
map不能使用增强for循环,没有实现Iterator接口,所以不能使用增强for循环 -
增强for循环出现目的:为了替代迭代器, 增强for底层就是迭代器实现的。
4.可变参数
可变参数的定义方法:数据类型...数组的名称
理解为一个数组,这个数组存储传递过来的参数
public static void add1(int...nums) { }
- 注意:
(1)可变参数需要写在方法的参数列表中,不能单独定义
(2)在方法的参数列表中只能有一个可变参数
(3)方法的参数列表中的可变参数,必须放在参数最后。例如:add1(int a,int...nums)