关于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 的匿名内部类只能存在于创建它的线程中,不能运行在多线程中,无法充分利用多核的硬件优势。
三、匿名内部类的缺点还有:
- 语法相对复杂。
- 在调用内部类的上下文中,指引和 this 的指代容易混淆。3. 类加载和实例创建语法不可避免。
- 不能引用外部的非 final 对象。
- 不能抽象化控制流程。
如何使用 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]
来生成目录: