JDK更新三原则:
一. 自动拆箱、自动装箱
1.自动装箱:Integer x = 5;[等同于Integer x = new Integer(5)]
2.自动拆箱:x = x + 4;[x自动调用了x.intValue();这个方法,化为了int型]
3.Integer的特殊知识点
问题:Integer a = 127;Intager b = 127; a==b结果是ture
原理:因为数值在byte范围内时,对于新特性,如果数值已经存在,将不再从新开辟空间建立对象,直接吧已有对象赋值给它。不在范围内时,无异于一般对象
二. 泛型
1.知识点:
1.1 定义:泛型是对集合传入元素类型进行的限定
1.2 意义:用于解决安全问题,是一个类型 安全机制
1.3 好处:避免了强转,错误转移到了编译时期
2.泛型设计
1.1 泛型类
//泛型类,固定了全部类中所有方法的操作类型
class Tool<E>
{
private E e;
public void set(E e){
this.e = e;
}
public E get(){
return e;
}
}
class java
{
public static void main(String[] args){
Tool<Object> tl = new Tool<Object>();
tl.set(new Object());//修改
t1.get();//获取
}
}
1.2 泛型方法
//泛型方法,注意一定要有参数
class Tool
{
public <E> void set(E e){
System.out.println(e);
}
}
class java
{
public static void main(String[] args){
Tool tl = new Tool();
tl.set("24124");//修改
tl.set(new Object());
}
}
1.3 泛型静态方法
(1)静态方法不能访问类上定义的泛型
public static <E> void set(E e){
System.out.println(e);
}
1.4 泛型限定
(1)意义:其实就是使定义的泛型具有类似多态的特性(能够接受子类或者父类)
(2)普通泛型是指具体类型,可以接收并操作这个类型。通配符?,可以理解为占位符。表示对这个泛型不清楚
(3)语法:<? extends E>可以接受E和E的子类型,上限
<? super E>可以就收E和E的父类型,下限
(4)注意:泛型限定的是要传入的类型
三. 增强for循环(foreach)
1.格式
for(数据类型 变量名 : 被遍历的集合(Collection)或者数组){
//循环体;
}
2.要求
(1)只有实现Iterable的类能够使用增强for
(2)foreach语句只能做查询操作,不能对集合中元素有增删改的操作(简化书写,却出现了局限性)
四. 可变参数
1.格式
修饰符 返回值类型 函数名(参数类型... 可变参数名){
方法体
}
2.知识点
(1)原理:就是数组型参数的简写形式,只要将要操作的元素作为参数传递即可,隐式的将这些参数封装进数组
(2)注意:可变参数一定要定义在参数列表的最后边
(3)重要:想让Java拆她却不拆——可变参数传入单个数组参数时,只有对象类型的数组会拆分为多个参数,基本数据类型的数组不会自动拆分,会识别成一个数组型参数
(4)重要:不想让Java拆她却拆了——当可变参数的参数是数组类型时,而且你只想往这个可变参数中传递一个数组型参数,那么要注意,程序会出错,因为Java默认会把这个数组拆掉
<1>.把参数数组装到Obejct[]数组当中,让Java拆个够!
<2>.把参数数组强转为Object类型,因为invoke方法能接收Object类型,Java就不会拆了。不过这个是特例,最好用上边的解决办法
五. 静态导入
1.格式
import static 包名.类名.*;//导入该类的所有静态成员