关于JDK8的新特性

来源:互联网 发布:sql中is null什么意思 编辑:程序博客网 时间:2024/05/16 08:16

关于JDK8的新特性

Java SE8 的重要性能包括

1、Lambda
2、Nashorn JavaScript 引擎
3、新的日期与时间 API
4、一套简洁的配置文件
5、从 JVM 中去除了“永久代(permanent generation)”。6、增强的注解功能

Java SE Embedded8

1、Java SE Embedded8为嵌入式及物联网设备提供了一个开发平台,具备Java SE 8的灵活性、可移植性和功能。
2、Java SE Embedded 8 使开
发人员能够运用 Java SE 8 为嵌入式设备建立更小的平台。

Java ME8

1、与 Java SE 8 一致的 Java 语言和 API
2、支持最新的 Web 协议
3、全面的应用模型
4、先进的安全功能5、用于电源管理及与多种标准外部设备交互的标准 API。


Lambda

lambda 概述
lambda 表示数学符号“λ”,计算机领域中λ代表“λ演算”,表达了计算机中最基本

的概念:“调用”和“置换”。

为什么使用 lambda

一、Java 是面向对象的语言,不能象函数式语言那样嵌套定义方法。
二、Java 的匿名内部类只能存在于创建它的线程中,不能运行在多线程中,无法充分利用多核的硬件优势。
三、匿名内部类的缺点还有:

  1. 语法相对复杂。
  2. 在调用内部类的上下文中,指引和 this 的指代容易混淆。3. 类加载和实例创建语法不可避免。
  3. 不能引用外部的非 final 对象。
  4. 不能抽象化控制流程。

如何使用 lambda

lambda 的语法包括三部分

1、参数列表

2、箭头符号”->”

3、代码块。

代码块

代码块语法遵循标准markdown代码,例如:

用 lambda 简化 Runnable 接口的实现方式 代码 public static void main(String[] args) {  //-----------------------------------------------------  final int x = 1;    new Runnable() {    @Override    public void run() {           System.out.println("匿名内部类实现Runnable接口");           System.out.println("x : "+ x);        // System.out.println("x : "+ x++); //error 常量} }.run();//-----------------------------------------------------    int y = 2; Runnable r = ()->{    System.out.println("lambda实现Runnable接口");             // lambda语法 可以引用外部的非final对象     System.out.println("y : "+ y);    // lambda语法只是部分改变了引用外部变量的语法    // System.out.println("y : "+ y++);};r.run(); }    运行结果为:    匿名内部类实现Runnable接口    x:1    lambda实现Runnable接口    y:2

Stream

什么是 Stream

1、Stream 在 Java8 中被定义为泛型接口
2、Stream 接口代表数据流。
3、Stream 不是一个数据结构,不直接存储数据。
4、Stream 通过管道操作数据。
5、创建 Stream 接口实现类对象: stream():创建一个 Stream 接口实现类的对象。
例如:
Stream stream=people.stream();

什么是管道

一、管道:代表一个操作序列。
二、管道包含以下组件:
1、数据集:可能是集合、数组等。
2、零个或多个中间业务。如过滤器
3、一个终端操作,如的 forEach

什么是过滤器

1、过滤器:用给定的条件在源数据基础上过滤出新的数据,并返回一个 Stream 对象。
2、过滤器包含匹配的谓词。
例如:判断 p 对象是否为男性的 lambda 表达式:
Stream stream=people.stream();
stream=stream.filter(p->p.getGender()==‘男’);

实例

public class Person {/*** 定义枚举:表示性别 ** @author admin**/public static enum Sex {    MALE, FEMALE }private String name; private int age; private double height; private Sex gender;public String getName() {    return name; }public void setName(String name) {    this.name = name; }public int getAge() {    return age; }public void setAge(int age) {    this.age = age; }public double getHeight() {    return height; } public void setHeight(double height) {     this.height = height;      }public Sex getGender() {    return gender; }public void setGender(Sex gender) {    this.gender = gender; }// ------构造器 public Person() {}public Person(String name, int age, double height, Sex gender){    super();    this.name = name;     this.age = age;     this.height = height;     this.gender = gender;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", height="+ height + ", gender=" + gender + "]";   }}

###编写测试
生成 Person 的集合对象,利用 lambda 语法进行遍历。

   static List<Person> creatPerson(){    List<Person> list = new ArrayList<>();     list.add(new Person("刘亦菲",30,1.70,Sex.FEMALE ));     list.add(new Person("李若彤",40,1.65,Sex.FEMALE ));     list.add(new Person("林青霞",62,1.68,Sex.FEMALE ));    list.add(new Person("刘德华",52,1.74,Sex.MALE ));        return list; }public static void main(String[] args) {List<Person> list = creatPerson();stream.forEach(p->System.out.println(p.toString()));}

运行结果
Person(name=”刘亦菲”, age=30, height=1.70, gender=FEMALE));
Person(name=”李若彤”, age=40, height=1.65, gender=FEMALE));
Person(name=”林青霞”, age=62, height=1.68, gender=FEMALE));
Person(name=”刘德华”, age=52, height=1.74, gender=MALE));
}

过滤器

创建一个元素为 Person 类的集合:people
使用 Stream、filter 和 forEach 显示该集合中所有女性
代码
生成 Person 的集合对象,利用 lambda 语法进行过滤并遍历。

 static List< Person > creatPerson{List<Person> list = new ArrayList<>();list.add(new Person("刘亦菲", 30, 1.70, Sex.FEMALE)); list.add(new Person("李若彤", 40, 1.65, Sex.FEMALE));  list.add(new Person("林青霞", 62, 1.68, Sex.FEMALE));  list.add(new Person("刘德华", 52, 1.74, Sex.MALE));  return list;}public static void main(String[] args) { List<Person> list = creatPerson(); list.stream() .fileter(p -> p.getGender() == Person.Sex.FEMALE) .forEach(p -> System.out.println(p.tostring()));}

运行结果
Person(name=”刘亦菲”, age=30, height=1.70, gender=FEMALE));
Person(name=”李若彤”, age=40, height=1.65, gender=FEMALE));
Person(name=”林青霞”, age=62, height=1.68, gender=FEMALE));

LocalDate

概述

LocalDate 类使用 ISO 日历表示年、月、日。

常用方法

LocalDate 类的常用方法:
1、 LocalDate.now():获取系统当前日期。
2、 LocalDate.of(int year,int month,int dayOfMonth)
按指定日期创建 LocalDate 对象。
3、getYear():返回日期中的年份。
4、getMonth():返回日期中的月份。
5、getDayOfMonth():返回月份中的日。
【案例】
用 LocalDate 获取当前日期。

public static void main(String[] args) {    LocalDate now = LocalDate.now();     System.out.println(now.getMonth()+"月"); //英文     System.out.println(now.getMonthValue()+"月");//数字     System.out.println(now.getDayOfMonth()+"日");    System.out.println(now.toString()); }

运行结果
2017年
SEPTEMBER月
9月
9日
2017-09-09

目录

[TOC]来生成目录:

  • 关于JDK8的新特性
    • Lambda
      • 代码块
    • Stream
      • 什么是 Stream
      • 什么是管道
      • 什么是过滤器
      • 实例
      • 过滤器
    • LocalDate
      • 概述
      • 常用方法
      • 目录

原创粉丝点击