千家信息网

JDK8新特性实例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇"JDK8新特性实例分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"JDK8新
千家信息网最后更新 2026年11月01日JDK8新特性实例分析

这篇"JDK8新特性实例分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"JDK8新特性实例分析"文章吧。

  函数式编程

  面向对象强调"一切皆对象",如果想要做事情,必须要找到对象来做。函数式编程思想强调"做什么",而不是"怎么做"。

  普通的开启线程

  //匿名内部类对象

  Runnabletask=newRunnable(){

  @Override

  publicvoidrun(){

  System.out.println("乌鸦坐飞机");

  }

  };

  newThread(task).start();

  更多java相关免费视频教程:java在线教程

  函数式编程开启线程

  newThread(()->System.out.println("龙卷风摧毁停车场")).start();

  前面的小括号:方法参数,没有参数时就写(),箭头指向后面要做的事情,箭头后面就好比是方法体大括号,代表具体要做的内容。

  Lambda表达式

  Lambda表达式,也可称为闭包,它是推动Java8发布的最重要新特性。

  Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用Lambda表达式可以使代码变的更加简洁紧凑。

  三要素:参数、箭头、代码

  格式:(参数类型参数名称)->{一些代码}

  使用Lambda表达式的前提:必须要有接口并且接口中有且只有一个抽象方法

  演示:编写一个Cook接口,接口中有一个makeFood()方法

  publicstaticvoidmain(String[]args){

  method(()->{

  System.out.println("闪刀启动!");

  });

  }

  privatestaticvoidmethod(Cookcook){

  cook.makeFood();

  }

  Lambda表达式省略规则:

  参数类型可以省略。但是只能同时省略所有参数的类型,或者干脆都不省略如果参数有且仅有一个,那么小括号可以省略如果大括号内的语句有且仅有一个,那么无论有没有返回值,return、大括号、分号都可以省略。

  publicstaticvoidmain(String[]args){

  method((a,b)->a+b);

  }

  privatestaticvoidmethod(Calculatorcalculator){

  intresult=calculator.sum(1234,9876);

  System.out.println(result);

  }

  在new一个接口时,也可以使用lambda表达式来代替匿名内部类

  Runnabletask=()->System.out.println("闪刀启动!");

  newThread(task).start();

  函数式接口

  接口当中有且仅有一个抽象方法,叫做函数式接口。

  JDK8中新增了注解@FunctionalInterface,用于检测一个接口是否为函数式接口。如果不是函数式接口,编译时会报错。@FunctionalInerface注解是可选的,就算不用这个注解,只要保证接口满足函数式接口的定义要求,也一样是函数式接口。

  @FunctionalInterface

  publicinterfaceMyInterface{

  voidmethod();

  }

  方法引用

  Printerprinter=(str)->System.out.println(str);这段代码实际上可以简写。

  只要是可推导的,就是可引用的,因此传参其实并没有意义,因此这里其实可以使用方法引用来简写System.out::println

  从java8开始,引入了一个全新的运算符,方法引用符(两个冒号连着写),所在的表达式就是一个方法引用,方法引用和Lambda本质是完全一样的,目的就是简化Lambda表达式的写法。

  Lambda的写法:s->System.out.println(s)

  方法引用写法:System.out::println

  两种写发完全等效

  publicstaticvoidmain(String[]args){

  method(System.out::println);

  }

  privatestaticvoidmethod(Printerprinter){

  printer.print("hello");

  }

  接口

  default方法

  接口本来是两个抽象方法,现在需要变成三个抽象方法,这个时候它的实现类也需要实现新的方法。

  当实现类太多时,操作起来很麻烦,JDK之前是使用开闭设计模式:对扩展开放,对修改关闭。即:创建一个新的接口,继承原有的接口,定义新的方法,但是这样的话,原本的那些实现类并没有新的方法,这时候可以使用接口默认方法。

  关键字使用default进行修饰,方法需要方法体。这样的方法所有的子类会默认实现(不用自己写),如果想要覆盖重写,也可以在实现类中覆盖重写

  /**

  *从java8开始,接口当中允许定义default默认方法

  *修饰符:publicdefault(public可以省略,default不能省略)

  */

  publicinterfaceMyInterface{

  voidmethod1();

  voidmethod2();

  defaultvoidmethodNew(){

  System.out.println("接口默认方法执行");

  }

  }

  注意:接口中的default方法相当于是一个新的关键字,和四种修饰符的"default"并非一个概念。

  活用default关键字,可以使程序达到"多继承"的效果。

  static方法

  从java8开始,接口当中允许定义静态方法,用法与一般类的静态方法相同。

  publicinterfaceAnimal{

  voideat();

  staticAnimalgetAnimal(){

  returnnewCat();

  }

  }

  流式操作

  流式处理给开发者的第一感觉就是让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现。

  比如我们希望对一个包含整数的集合中筛选出所有的偶数,并将其封装成为一个新的List返回,那么在java8之前,我们需要通过如下代码实现:

  对于一个nums的集合:

  Listevens=newArrayList<>();

  for(finalIntegernum:nums){

  if(num%2==0){

  evens.add(num);

  }

  }

  通过java8的流式处理,我们可以将代码简化为:

  Listevens=nums.stream().filter(num->num%2==0).collect(Collectors.toList());

  先简单解释一下上面这行语句的含义,stream()操作将集合转换成一个流,filter()执行我们自定义的筛选处理,这里是通过lambda表达式筛选出所有偶数,最后我们通过collect()对结果进行封装处理,并通过Collectors.toList()指定其封装成为一个List集合返回。

  常用操作案例:

  //初始化list集合

  Listlist=newArrayList();

  list.add("测试数据1");

  list.add("测试数据2");

  list.add("测试数据3");

  list.add("测试数据12");

  //使用λ表达式遍历集合

  list.forEach(s->System.out.println(s));

  //结合Predicate使用和过滤条件筛选元素

  Predicatecontain1=n->n.contains("1");

  Predicatecontain2=n->n.contains("2");

  //根据条件遍历集合

  list.stream().filter(contain1).forEach(n->System.out.println(n));

  list.stream().filter(s->contain1.test(s)).forEach(s->System.out.println(s));

  list.stream().filter(contain1.and(contain2)).forEach(n->System.out.println(n));

  list.stream().filter(contain1.or(contain2)).forEach(n->System.out.println(n));

  //将过滤后的元素重新放到一个集合中

  ListnewList=list.stream().filter(contain1.and(contain2)).collect(Collectors.toList());

  集合中decimal求和

  BigDecimalsum=list

  .stream()

  .map(Person::getAmount)

  .reduce(BigDecimal::add)

  .get();

  //排序,也需要新的集合接收

  ListresultList=newArrayList();

  resultList=list.stream().sorted(Comparator.comparing(Student::getAge)).collect(Collectors.toList())

以上就是关于"JDK8新特性实例分析"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

方法 接口 函数 参数 表达式 代码 内容 就是 括号 处理 特性 对象 数据 测试 实例 实例分析 分析 关键 关键字 写法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手磨咖啡 云南咖啡 保险科技 互联网保险 关于新基建和互联网科技 互联网 的科技创新 电子科技大学互联网 兼蜜互联网科技 上游互联网科技 四川狮子座互联网科技 汉立互联网科技有限公司联系电话 互联网科技公司实习生 苏州五指互联网络科技有限 四川慕妮娅互联网科技有限公司 互联网公司高科技产品 广东工业互联网大赛深圳学泰科技 神州科技互联网有限公司 北京军民互联网科技公司 深圳互联网科技园地址 互联网科技创业有什么好项目 互联网 科技节活动 微视频大赛 广州百单互联网科技有限公司 互联网科技与金融科技 欧洲十大科技互联网公司 威龙国际互联网科技公司 昆明中奇联合互联网科技 互联网时代科技型公司的机会 互联网科技手抄报图片 美国五大互联网科技公司市值多少 恒生互联网科技趋势 广东猫王互联网科技有限公司电话
0