关于JDK8的新特性

关于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;
}
@Override
public 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]来生成目录:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值