热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java8的常用的新特征

一、Java8对接口做了进一步的增强。(默认方法和静态方法)a.在接口中可以添加使用default关键字修饰的非抽象方法。即:默认方法(或扩展方法不用被实现)如:comparator接口

一、Java 8 对接口做了进一步的增强。(默认方法和静态方法)

a. 在接口中可以添加使用 default 关键字修饰的非抽象方法。即:默认方法(或扩展方法不用被实现)如:comparator接口。Iterable接口中的forEach默认方法。

b. 接口里可以声明静态方法,并且可以实现。如:comparator接口。Collections.sort(), max(), min() 等方法;

 

Java8内部类访问外部变量不需要加final修饰。

 

二、Java8新增list.forEach遍历(Lambda表达表达式,代替匿名内部类)

遍历方式:

1
2
3
4
5
6
list.forEach( new  Consumer() {
     @Override
     public  void  accept(String s) {
         System.out.println(s);
     }
});
1
2
3
4
5
     Lambda表达式: 
list.forEach(s ->{
             System.out.println(s);
         }
         );
 

函数作为参数传递进方法中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
TestJava8 tester =  new  TestJava8();
         // 类型声明
         MathOperation addition = ( int  a,  int  b) -> a + b;
         // 不用类型声明
         MathOperation subtraction = (a, b) -> a - b;
         // 大括号中的返回语句
         MathOperation multiplication = ( int  a,  int  b) -> {  return  a * b; };
         // 没有大括号及返回语句
         MathOperation division = ( int  a,  int  b) -> a / b;
         System.out.println( "10 + 5 = "  + tester.operate( 10 5 , addition));
         System.out.println( "10 - 5 = "  + tester.operate( 10 5 , subtraction));
         System.out.println( "10 x 5 = "  + tester.operate( 10 5 , multiplication));
         System.out.println( "10 / 5 = "  + tester.operate( 10 5 , division));
     }
     interface  MathOperation {
         int  operation( int  a,  int  b);
     }
     private  int  operate( int  a,  int  b, MathOperation mathOperation){ //接口作为方法的参数,传对应的实现类,lambd表达式代替了匿名类
         return  mathOperation.operation(a, b);
     }

三、可以使用重复注解

1
2
3
4
@Filter "filter1"  )
@Filter "filter2"  )
public  interface  Filterable {       
}

 

四、新的Date/Time ApI

        LocalDate,LocalTime,Clock类;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
final  Clock clock = Clock.systemUTC();
         System.out.println( clock.instant() );
         System.out.println( clock.millis());
 
         // Get the local date and local time
         final  LocalDate date = LocalDate.now();
         final  LocalDate dateFromClock = LocalDate.now( clock );
         System.out.println( date );
         System.out.println( dateFromClock );
 
         // Get the local date and local time
         final  LocalTime time = LocalTime.now();
         final  LocalTime timeFromClock = LocalTime.now( clock );
         System.out.println( time );
         System.out.println( timeFromClock );

 

五、函数式接口

1、函数式接口(Functional Interface)是只包含一个方法的抽象接口;

2、函数式接口是为Java 8中的lambda而设计的,lambda表达式的方法体其实就是函数接口的实现。

3、@FunctionalInterface注解不是必须的,只要接口只包含一个抽象方法,虚拟机会自动判断该接口为函数式接口,加上后避免添加新方法。

 

六、方法引用

1、方法引用是lambda表达式的一种简写;

1
2
3
4
5
6
7
对象::实例方法
类::静态方法
类::实例方法
类:: new
Arrays.sort(strings, String::compareToIgnoreCase);
// 等价于
Arrays.sort(strings, (s1, s2) -> s1.compareToIgnoreCase(s2));

 



来源: http://note.sdo.com/note/content/t8Lrg~mHPHlpM70gs0006W?password=2689

 


推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了GregorianCalendar类的基本信息,包括它是Calendar的子类,提供了世界上大多数国家使用的标准日历系统。默认情况下,它对应格里高利日历创立时的日期,但可以通过调用setGregorianChange()方法来更改起始日期。同时,文中还提到了GregorianCalendar类为每个日历字段使用的默认值。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文介绍了如何通过维持两个堆来获取一个数据流中的中位数。通过使用最大堆和最小堆,分别保存数据流中较小的一半和较大的一半数值,可以保证两个堆的大小差距为1或0。如果数据流中的数量为奇数,则中位数为较大堆的最大值;如果数量为偶数,则中位数为较大堆的最大值和较小堆的最小值的平均值。可以使用优先队列来实现堆的功能。本文还提供了相应的Java代码实现。 ... [详细]
author-avatar
昙檀禅潺_162
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有