jdk8在Java编程语言上加了哪些新特性

it2022-05-05  150

使用lambda表达式,如: () -> {return 1;} //该函数无入参,返回1; (a, b) -> a + b //返回a与b的和 int a = (int a, int b) -> a + b; // 有类型声明,返回a与b的和 int a = (a, b) -> a + b; // 无类型声明,返回a与b的和 int a = (int a, int b) -> { return a * b; }; // 大括号中的返回语句 int a = (int a, int b) -> a / b; // 没有大括号的返回语句 接口中的默认方法与静态默认方法。 默认方法是指接口可以实现的方法,由于之前jdk版本的接口已经定好的情况下,如果突然你又需要在该接口新增新的方法了,但是直接新增抽象方法的话,其他所有实现了该接口的类都得实现该接口的该方法,那么可以想象,无数的类都得变动,这样也就不符合“开放-封闭原则”了,对扩展开放,对修改关闭。因此jdk8添加了一个default关键字,接口中的实现方法使用该关键字修饰,即为默认方法,其他实现类可以不用实现该方法,当然也可以选择重写该方法。如下所示: public interface Test{ String test1(); defualt String test2() { return "test2"; } } public class SubTest1 implements Test { @Override public String test1 { return "test1"; } } public class SubTest2 implements Test { @Override public String test1 { return "test1"; } @Override public String test2 { return "test2-1"; } }

静态默认方法与上述类似,表示接口类中可以添加以static修饰的实现方法。如下所示:

public interface Test{ String test1(); defualt String test2() { return "test2"; } static String test3() { return "test3"; } } 函数式接口:有且只有一个抽象方法的接口,为函数式接口。functional interface 注意如果使用@FunctionalInterface主键在该接口类上,则该接口只能有一个抽象方法,否则会报错(特殊情况,还可以覆盖Object类中的public方法),且所有方法必须是public的。 String toString(); //覆盖Object 的 toString()方法 int hashCode(); //覆盖Object 的 hashCode()方法 boolean equals(Object obj); //覆盖Object 的 equals()方法 方法引用,如下 ClassName::methodName; //方法引用 ClassName::new; //引用构造方法 ArrayName[]::new; //数组构造方法引用 Stream API,java通过Stream可以类似于SQL那样查出自己需要的数据。主要是在流中通过筛选、排序等处理,以获取需要的结果。如下: public class TestStream { public static void main(String[] args) { List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 1,1); // 获取数字为1的数量 int count = (int) nums.stream().filter(num -> num == 1).count(); System.out.println("coout:" + count); } }

Base64,jdk8将Base64的编码器于解码器内置于其中,作为标准

日期时间API

Optional 类,该类是一个容器类,可以存null值,可通过isPresent判断是不是空

public static void main(String[] args) { String test1 = null; String test2 = "a"; Optional<String> optest1 = Optional.ofNullable(test1); Optional<String> optest2 = Optional.ofNullable(test2); //判断optest1是否存在值 if (optest1.isPresent()) { System.out.println("optest1 : " + optest1.get()); } else { System.out.println("optest1 is null!"); } //判断optest2是否存在值 if (optest2.isPresent()) { System.out.println("optest2 : " + optest2.get()); } else { System.out.println("optest2 is null!"); } } Nashorn JavaScript,使用 ScriptEngineManager, 就可以让JavaScript在 Java 中执行

最新回复(0)