1.5
1.包装器(自动装箱拆箱)
包装器有:Double,Float,Long,Integer,Short,Character和Boolean
自动装箱,只需将该值赋给一个类型包装器引用,java会自动创建一个对象。
自动拆箱,只需将该对象值赋给一个基本类型即可
2.可变长参数
3.泛型
注:Basic<T>和Basic<E>中T和E只是标志位(语义化为:Type和Element简写或者其他简写),本质上是可以使用A,B任意替换
注:泛型中? super T和? extends T的区别
<? super T>表示包括T在内的任何T的父类,<? extends T>表示包括T在内的任何T的子类(具体请自行查阅)
1)泛型使用(创建List中仅可以存放指定string类型数据)
2)?通配符
下面这句代码,我赶脚很有深度和使用意义(泛型:仅仅是类型的限制,不包含任何实际意义)
4.foreach(增强for)
5.静态引入(本类中调用其他类中中所有静态成员->[格式:import static 包名.类名.静态的成员;])
1.7
1.switch可以使用String
2.类型自动推断
// Pre-JDK 7
List<String> lst1 = new
ArrayList<String>();
// JDK 7
List<String> lst2 =
new
ArrayList<>();
3.
对Java集合(Collections)的增强支持
关于jdk1.7中集合新特性无法使用的问题->此特性纯属无稽之谈(经测试,无效)
4.一个catch可以写多个异常类型
try { ...... } catch(ClassNotFoundException | SQLException ex) {
ex.printStackTrace();
}
1.8
1.Lambda 表达式
格式:左侧参数 -> 右侧函数体
语法格式一:无参数,无返回值
()->System.out.println(“Hello Lambda!”);
语法格式二:lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过类型推断
(x , y) -> Integer.compare(x, y);
语法格式三:若只有一个参数,()可以省略不写
x->System.out.println(“Hello Lambda!”);
2.函数式接口(方法形参可以是接口)
类似于如下结构
1)接口@FunctionalInterface注解修饰
2)有且仅有一个抽象方法(Object的public方法除外),但是可以有多个非抽象方法的接口,如果需要多个抽象方法(default关键字)
为什么这么麻烦来调整interface接口呢?肯定有很大的好处的
函数式接口的一大特性:可以被lambda表达式和函数引用表达式代替。也就是说声明这样的接口,是可以灵活的以方法来传参
Java8 内置的四大核心函数式接口
1)断言式接口predicate(过滤数组)
2)Function:函数式接口(处理字符串)
3)Supplier:供给型接口
4)Consumer:消费型接口
3.方法引用 [::] (个人感觉::就相当于方法调用的.)
如下图所示
()->{System.out::println("方法调用")}; //本句只是提供演示意思并不可以单独运行
4.STREAM