首页 > php教程 > 正文

JAVA8原来这么牛,PHP走开,JAVA可以说是最好的编程语言啦,又重新爱上了JAVA

转载 2019-04-19 0 21

据我了解现在好多公司还停留在java1.6上面,甚至还有的是1.5。回头一想2014年初Java 8就发布了,我们可以放心切换到8上来拉。在java 8中,引入和增强了lambda表达式。还有一些很重置的功能,如默认方法,流API和新的日期/时间API。

JAVA8原来这么牛,PHP走开,JAVA可以说是最好的编程语言啦,又重新爱上了JAVA

我们一起要看看到底有哪些新东西,以及他们的简单使用!

Lambda表达

我猜很多人不知道Lambda表达式。在编程中,Lambda表达式(或函数)是一个匿名函数,即一个没有名称的函数。

lambda表达式的基本语法是:

(参数) - >表达式

(参数) - > {statements; }

() - >表达式

举一个简单的例子,一个加法:

(x,y) - > x + y //传入两个参数并返回它们的和,是不是相当简练

请注意,根据x和y的类型,方法可能会在多个地方使用。参数可以匹配int,或整数或简单的字符串。基于上下文,它将添加两个整数或两个字符串。

编写lambda表达式有下面几个规范:

  1. lambda表达式可以具有零个,一个或多个参数。

  2. 可以显式声明参数的类型,也可以从上下文推断参数的类型。

  3. 多个参数包含在括号中,并用逗号分隔。空括号用于表示一组空的参数。

  4. 当有一个参数时,如果能推断出它的类型,则不必使用括号。例如a - >return a * a。

  5. lambda表达式可以包含零个,一个或多个语句。

  6. 如果lambda表达式只有单个语句,则大括号不可以省略,当有多条语句则必须用大括号括起来。

函数接口

函数接口也称为单抽象方法接口,他只允许有一个抽象方法。 Java 8里新增加了一个注释,即@FunctionalInterface,当您注释的接口违反了函数接口的约定时,编译器会提示错误。

一个简单的函数接口示例:

@FunctionalInterface

public interface MyFirstFunctionalInterface {

public void firstWork();

}

由于默认方法不是抽象的,所以你可以随意添加默认方法。还有一点就是你可以在函数接口里重写Object的方法,因为他也不会计入抽象方法数,所以这还是一个合法的函数式接口。如下所示:

@FunctionalInterface

public interface MyFirstFunctionalInterface {

public void firstWork();

@Override

public String toString(); //重写Object 类的方法

@Override

public boolean equals(Object obj); //重写Object 类的方法

default void defaultMethod() {

}

}

默认方法

Java 8允许在接口中添加非抽象方法。这些方法必须声明为默认方法。 java 8中引入了默认方法来启用lambda表达式的功能。

默认方法使你能够向库的接口添加新功能,并确保与旧版本的这些接口编写的代码的二进制兼容性。

我们来看一个例子

public interface Moveable {

default void move(){

System.out.println("我正在走..");

}

}

Moveable 接口定义了一个move()方法,并提供了一个默认的实现。如果任何类实现了这个接口,那么它不需要实现它自己的move()方法。它可以直接调用instance.move()。例如

public class Animal implements Moveable{

public static void main(String[] args){

Animal tiger = new Animal();

tiger.move();

}

}

输出:我正在走..

如果类实现move()方法,则不会再执行默认实现。

日期/时间API更改

日期

Date甚至已经过时了,用于替换Date类的新类是LocalDate,LocalTime和LocalDateTime。

LocalDate类表示日期。没有时间或时区的表示。

LocalTime类代表一个时间。没有表示日期或时区。

LocalDateTime类表示日期时间。没有时区的表示。

如果要使用带有区域信息的日期功能,则Lambda为您提供与上述类似的额外3类,即OffsetDate,OffsetTime和OffsetDateTime。时区偏移可以用“+05:30”或“Europe/Paris”格式表示。这是通过使用另一个类即ZoneId来完成的。

LocalDate localDate = LocalDate.now();

LocalTime localTime = LocalTime.of(12, 20);

LocalDateTime localDateTime = LocalDateTime.now();

OffsetDateTime offsetDateTime = OffsetDateTime.now();

ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Europe/Paris"));

时间戳和Duration

为了在任何时候表示特定的时间戳,需要使用的是Instant。 Instant类代表一个即时的时间精度为纳秒。 Instant上的操作包括与另一个Instant的比较,并添加或减去duration。

Instant instant = Instant.now();

Instant instant1 = instant.plus(Duration.ofMillis(5000));

Instant instant2 = instant.minus(Duration.ofMillis(5000));

Instant instant3 = instant.minusSeconds(10);

duration类是Java语言第一次带来的全新概念,它表示两个时间戳之间的时差。

Duration duration = Duration.ofMillis(5000);

duration = Duration.ofSeconds(60);

duration = Duration.ofMinutes(10);

最新的日期api让我瞬间觉得生活好美好啊。

面试题答案都要改了,以前老说接口里方法不能写实现,这个已经是错的啦。

相关文章


  • 仿互站PHP源码友价T5商城商业运营版新模板带指数刷新积分
  • 鱼福CMS仿扔赞网微信公众号导航PHP源码漂亮大气手机wap
  • 超强windows10稳定Nginx绿色环境,可无限自定义PHP和mysql版本、同时运行N个版本
  • 吐血推荐!羊皮卷系列:学通PHP的24堂课教材与视频网盘分享下载
  • 深入剖析 Web 服务器与 PHP 应用的通信机制 - 掌握 CGI 和 FastCGI 协议的运行原理
  • (实用篇)给手机发验证码 综合使用 (忘记密码处理 php发验证码 重置用户密码)
  • 码农问怎么加密核心php代码,除了精彩回答,有人是这样怼他的!
  • 最新站群系统V5.5商业PHP源码蜘蛛池短网址站群无限泛解