java8的新特性

2020-05-20  本文已影响0人  戴高帽

1.看了java8的新特性之后 lambda表达式的一些语法,和接口 接口可以定义静态方法了的一些改变之后,对之前的接口的看法重新理解了下,现在总结下。  -----------8之前的接口内是不能定义静态方法的(感觉面试笔试的时候碰到过,而且碰到过“你知道8的新特性么?”之前的回答真特么sb)!-(1)接口的定义了静态方法之后 要知道接口中的方法默认的都是抽象方法(因为没有方法体),当你去用类名去调用这个接口中的静态方法,你没具体实现,怎么去执行!矛盾。 这个话说得好“静态的变量和方法在内存中分配了空间, 而接口只是类的表现形式,是没有分配空间的。”当你想去抽象中(接口)的具体方法时,这个就是有的时候会去继承一个抽象类。此时会想起一覆盖机制,虚拟机在调用实例方法的时候 会查询对象的类,并在类中的表中去寻找请求的方法的签名,如果找到方法体则调用他,否则去找它的父类,如果在父类中没有找到的话则会报 no such method error 如果子类和父类相同的方法签名,首先会遇到子类的版本 则不会去执行父类 这就是覆盖(override)的机制;---------------------------------------------------(2)接口中的变量口中的变量也都是Final、static。

2.现在来说lambda表达式的语法,主要是用来简洁表示函数式接口(有且只有一个抽象方法,如Runnable接口),也即是之前匿名内部类的代替,我们用匿名内部类只是为了想用其内部的一个方法不是这个对象。函数式接口可以用@FunctionInterface注解来标识 

  lambda的语法:参数  -> 表达式(函数接口里面的方法体的具体实现,之前我们去new一个匿名内部类就是为了去实现这个方法体,我们具体在这个方法要写啥,有了这个表达式我之前写我们要在这个方法体要写的东西 比如 System.out.println("run----);又比如仅仅去返回一个结果returnInteger.compare(w1.length(),w2.length());),我想这就是为什么他定义的函数式接口只有一个抽象方法,有多个抽象的方法话我这个lambda表达式该写哪个 

关于他的方法引用有点模糊 具体参见博客: java8特性详解一 lambda

上一篇下一篇

猜你喜欢

热点阅读