JDK各大版本新特性
JDK1.5新特性
1.方法的可变参数:数组
public static int add(int ... arr) {
int length = arr.length;
int sum = 0;
for(int i =0; i < length; i++) {
sum = sum + arr[i];
}
return sum;
}
在方法中用 … 表示可变参数
可变参数必须放在方法参数的最后一个并且有且只有一个 ;
2.for-eanch语句(不再详解)
3.静态导入(import)(了解)
import static 导入一个类的所有静态域(方法与属性),
使用导入类的静态域就像是在本类中定义的一样;
使用静态导入后调用那个包中的方法可不加类名直接调用;
注意:不推荐使用静态导入;
4.泛型(类型守门员)
定义:类或方法在定义时类型不确定。使用时才确定类型。
alt+insert快速导入(例如getter()、setter())
ClassCastException(RuntimeException):在强转时,两个毫无关系的类产生的异常。
安全隐患:存在于强转,泛型可以避免向下转型的安全隐患;
4.1泛型:在定义时类型不确定,只有在具体使用时才能确定类型。
4.2泛型类
class MyClass<T,E> {
//泛型类可以接受多个类型
private T t;
private E e;
}
- <>内的T被称作是类型参数,用于指代任意类型,不包括基本类型;
- 一般使用单个大写字母
- 引入泛型后,一个泛型类的类型在使用时已经确定好,因此无需向下转型;(解除了向下转型的安全隐患)
- 技巧:IDEA变量自动补全:ctrl+alt+V
4.3泛型方法()
定义:在方法声名上用<>定义的方法才叫泛型方法,泛型方法可以脱离于泛型类独立存在;
class MyClass2 {
public <T> void method(T t) {
System.out.println(t);
}
}
例:
当泛型类与泛型方法共存时,泛型方法始终与自己的类型参数为准,与泛型类中的类型参数无关。
所以为了避免混淆,一般使用不同的类型参数来定义泛型类与泛型方法;
class MyClass<T> {
private T t;
public <T> void method(T t) {
System.out.println(t);
}
}
通配符:(⭐)
问题:引入泛型后参数类型确定,方法参数只能接受一种类型的泛型类
1.?通配符
只能取得泛型对象中的值,无法通过类似setter方法的设置值
由于传入类型无法确定,因此无法设置具体值到相应对象中
例码:
class Myclass<T> {
private T t;
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
public class Test1 {
public static void main(String[] args) {
fun(new Myclass<String>());