1.接口中包含默认方法和静态方法
/*
* 接口静态方法和默认方法
*/
interface jdk8{
public static void fun() {
System.out.println("接口静态方法");
}
public default void sun() {
System.out.println("接口默认方法");
}
public int aun();
public void dun(int flag);
}
class ojbk implements jdk8{
@Override
public int aun() {
System.out.println("接口重写方法");
return 1;
}
@Override
public void dun(int flag) {
// TODO Auto-generated method stub
}
}
接口可以定义静态方法 默认方法 抽象方法;抽象类可以定义抽象方法 静态方法 一般方法
default方法通过对象调用,静态方法由接口调用
2.Lamada表达式和Stream接口
说lamada表达式之前我想说一下匿名内部类,因为两者在某些程度上有相似之处
1.必须继承一个父类或者实现一个接口
2.匿名内部类不能是抽象的,不能定义构造器(因为没类名)
/*
定义的接口
*/
interface jdk8{
public static void fun() {
System.out.println("接口静态方法");
}
public default void sun() {
System.out.println("接口默认方法");
}
public int aun();
public void dun(int flag);
}
/*
* 定义的抽象类
*/
abstract class 抽象ojbk{
public void fun() {
System.out.println("抽象类一般方法");
}
public static void sun() {
System.out.println("抽象类静态方法");
}
abstract boolean aun();
}
/*
* 接口和抽象类实现的匿名内部类
*/
public void test(jdk8 jd) {
System.out.println(jd);
jd.dun(0);
}
public void test2(抽象ojbk oj) {
System.out.println(oj.aun());
}
jdk.test(new jdk8() {
@Override
public int aun() {
return 0;
}
@Override
public void dun(int flag) {
}
});
jdk.test2(new 抽象ojbk() {
@Override
boolean aun() {
return false;
}
});
Lamada与匿名内部类的区别
/*
* 匿名内部类实现多线程
*/
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类");
}
}).start();
/*
* Lamada表达式实现多线程
*/
new Thread(()->System.out.println("Lamada")).start();
Lamada表达式处理list
Stream是对集合的包装,通常和lambda一起使用,使用lambdas可以支持许多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等。 同样,Stream使用过滤方法和distinct去重方法
stream接口经常与Lamada配合使用,相当于一种高级迭代器,类似于Iterator又由于Iterator,它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程 。
list.stream().filter((x)->x%2==0).
forEach((x)->System.out.println(x));
List<Integer> max=list.stream().filter((x)->x%2==1).collect(Collectors.toList());
3.重复注解
java8允许在一个位置可以注解多个,这就不多解释了
4.JVM方面
永久代被移除了,取而代之的是元空间,相应的参数也发生了变化