JDK8特性

2020-09-17 16:01发布

方法引用和方法调用区别?

方法引用和方法调用区别?

6条回答
xiaoxiao_123
2楼 · 2020-09-17 16:03

方法引用:

   返回的是接口的实现 。

 private static  Iterable itToIterable(Stream stream) {
        return stream::iterator; //编译通过此处返回的是Iterable
  }


方法调用:

   返回的是方法的返回值。

 private static  Iterable itToIterablePro(Stream stream) {
        return stream.iterator(); //编译失败此处返回的是iterator
    }


刘洋
3楼 · 2020-09-17 16:10

方法引用是对Lambda表达式的进一步简化

隔壁街道小胖子
4楼 · 2020-09-17 17:18

jdk5.0中出现的新特性
泛型(Generics)
增强的“for”循环(Enhanced For loop)
自动装箱/ 自动拆箱(Autoboxing/unboxing)
类型安全的枚举(Type safe enums)
静态导入(Static import)
可变参数(Var args)

我是大脸猫
5楼 · 2020-09-17 20:44

1、语言新特性
1.1接口新增默认方法与静态方法

1.1.1  Interface Default Method:For creating a default method in java interface, we need to use “default” keyword with the method signature. For example:

package com.java8.defaultmethod;public interface Interface1 { void method1(String str); //a default method default void log(String str){  System.out.println("I1 logging::"+str); }}

Notes:类继承多个Interface接口同名方法(如show())时,必须在子类中@Override重写父类show()方法。

1.1.2 Interface Static Method:interface static method is similar to default method except that we can’t override them in the implementation classes.for example:

package com.java8.staticmethod;public interface MyData {static boolean isNull(String str) { System.out.println("Interface Null Check"); return str == null ? true : "".equals(str) ? true : false;}}

1.1.2.1 Functional Interfaces:含有一个显式声明函数(抽象方法)的接口称为函数接口,注释@FunctionalInterface用作检查代码块,包package java.util.function,通常使用lambda expressions来实体化函数接口,for example:

特性说明:

    1,函数式接口仅仅只有一个方法(非默认或静态方法),用于显示转换成ladbma表达式。

    2, java.lang.Runnable接口 java.util.concurrent.Callable接口是两个最典型的函数式接口。

    3.如果一个函数式接口添加一个普通方法,就变成了非函数式接口(一般定义的接口)。

              4.Jdk8 规范里添加了注解@FunctionalInterface来限制函数式接口不能修改为普通的接口.

  新增了四个重要的函数式接口:函数形接口 、供给形接口消费型接口、判断型接口

         

 

1.2 新增Lambda表达式

 1.2.1 Lambda表达式(基于函数的匿名表达式)

   

  语法:( object str,....)[参数列表]   ->[箭头符号]     代码块或表达式

  特性:Lambda 的类型是从使用 Lambda 的上下文推断出来的。上下文中 Lambda 表达式需要的类型称为目标类型(一个 Lambda表达式所在的类的类型。并且必须存在一个目标类型);  匿名、函数、传递、简洁。

1.3 新增方法引用

1)构造器引用

             

2)静态方法引用

               

3)(任意对象)的方法引用

                 

4)实例对象的方法引用

            

5)数组引用

           

1.4 重复注解

       Java 5引入了注解机制,这一特性就变得非常流行并且广为使用。然而,使用注解的一个限制是相同的注解在同一位置只能声明一次,不能声明多次。Java 8打破了这条规则,引入了重复注解机制,这样相同的注解可以在同一地方声明多次。重复注解机制本身必须用@Repeatable注解.

              

1.5 扩展注解的支持

      jdk 8扩展了注解的上下文。现在几乎可以为任何东西添加注解:局部变量、泛型类、父类与接口的实现,就连方法的异常也能添加注解。

              

 

PS:分析的代码见‘https://www.journaldev.com/592/java-try-with-resources’

原贴:https://blog.csdn.net/jun55xiu/article/details/93201032

浅浅77
6楼 · 2020-09-18 15:55

方法引用返回的是接口的实现 。

  private static  Iterable itToIterable(Stream stream) {        return stream::iterator; //编译通过此处返回的是Iterable
  }

方法调用:

方法调用返回的是方法的返回值。

    private static  Iterable itToIterablePro(Stream stream) {        return stream.iterator(); //编译失败此处返回的是iterator
    }


像风没有归宿
7楼 · 2020-09-21 17:43

这其实不涉及多重继承,因为接口仍然无法设置非静态字段! 这个东西使得java向scala这种组合trait的语言靠拢了一些(而非通过接口定义协议),也更好支持函数式编程(andthen之类的可以直接default实现)

相关问题推荐

  • 回答 156

    对于每一位才开始接触JAVA的新手来说,先不要管算法和数据结构,大多数简单的程序不需要用到算法和数据结构,所以当你真正需要时再去学习。编程一段时间以后,你就会知道在哪些地方用到他们。这时知道算法的名字并了解它们的功能,然后动手去实践。当我们在去...

  • 回答 93

    2个都很好就业,更关键的是要学得到东西

  • 回答 12
    已采纳

    获取Map集合中所有的key可以通过map集合的keySet()方法获取例如:    Map map = new HashMap();    map.put(xx,xx); //存放数据    //.... 省略    Set set = map.keySet();    //可以通过迭代器进行测试    Iterator iter = set.iter...

  • 回答 56
    已采纳

    不同年龄,不同掌握程度,学历,找工作城市,面试能力这是一个多方面影响的结果,如果是平均值的话,全国平均薪资14k左右

  • 回答 38

    具体学多久,根据自己的学习力,自律性、解决问题能力来决定若系统性学习,跟着讲师的节奏走,大概半年左右,有专业的讲师把课程进行规划,尽心系统学习,有问题,讲师会帮忙解决,学习的效率很高,避免了自学中出现各种问题解决不了,而耽误很多时间,可能会...

  • 回答 23
    已采纳

    (1)idea启动时会有两个快捷方式,安装完后默认生成在桌面的是32位的idea的快捷方式,如果我们使用这个快捷方式运行大项目,一般都会很卡。解决方法是找到idea的安装目录,然后进入bin文件夹,找到名称为idea64的应用程序,右键他生成桌面快捷方式。以后每次...

  • BIO与NIO、AIO的区别2020-05-19 15:59
    回答 4
    已采纳

    IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO     在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要...

  • Java方法的命名规则2021-04-06 19:07
    回答 31

    ava是一种区分字母的大小写的语言,所以我们在定义变量名的时候应该注意区分大小写的使用和一些规范,接下来我们简单的来讲讲Java语言中包、类、变量等的命名规范。(一)Package(包)的命名Package的名字应该都是由一个小写单词组成,例如com、xuetang9、compan...

  • 回答 2

    public class Point {    private int x;    private int y;    public int getX() {        return x;    }    public void setX(int x) {        this.x = x;    }    public int getY() {        return y;    } ...

  • 回答 6

    经典版单例模式public class Singleton {        private static Singleton uniqueInstance;//利用一个静态常量来记录singleton类的唯一实例。     private Singleton() {     }     public static  Singleton getInstance()...

  • 回答 3

    哈希表的长度一般是定长的,在存储数据之前我们应该知道我们存储的数据规模是多大,应该尽可能地避免频繁地让哈希表扩容。但是如果设计的太大,那么就会浪费空间,因为我们跟不用不到那么大的空间来存储我们当前的数据规模;如果设计的太小,那么就会很容易发...

  • 回答 14

    1. DOM(Document Object Model)        DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才...

  • 回答 19

    1)作用不同: throw用于程序员自行产生并抛出异常; throws用于声明在该方法内抛出了异常2) 使用的位置不同: throw位于方法体内部,可以作为单独语句使用; throws必须跟在方法参数列表的后面,不能单独使用。3)内容不同: throw抛出一个异常对象,且只能是...

  • 回答 11

    基本执行过程如下:1)程序首先执行可能发生异常的try语句块。2)如果try语句没有出现异常则执行完后跳至finally语句块执行;3)如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。4)catch语句块可以有多个,分别捕获不同类型...

  • 回答 20

    100-199 用于指定客户端应相应的某些动作。 200-299 用于表示请求成功。 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。 400 语义有误,当前请求无法被服务器理解。 401 当前请求需要用户验证...

  • 回答 16

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java编译...

没有解决我的问题,去提问