課程概要:
1、Java8概述
2、下載jdk 1.8
3邑蒋、安裝jdk 1.8
4、配置環(huán)境變量
5按厘、在Eclipse中使用jdk 1.8
6医吊、lambda
6.1 lambda概述
6.2 lambda案例(上)
6.3 lambda案例(下)
7、Stream類
8逮京、過濾器案例
9卿堂、DoubleStream接口
10、日期類-LocalDate類
11、時(shí)間類LocalTime
12草描、日期時(shí)間類-LocalDateTime
13览绿、DateTimeFormatter類-解析字符串為日期
14、ZoneDateTime類:格式化日期為字符串
1穗慕、Java 8概述
</br>一饿敲、Java 8版本
- oracle公司于2014年3月27日正式推出Java 8
- Java SE 8
- Java ME 8
- Java Embedded 8
二、Java SE8 的重要性能包括:
1逛绵、Lambda
2怀各、Nashorn JavaScript引擎
3、新的日期與時(shí)間API
4术浪、一套簡潔的配置文件
5瓢对、從JVM中去除了“永久代(permanent generation)”
6、增強(qiáng)的注解功能
三胰苏、Java SE Embedded 8
1硕蛹、Java SE Embedded 8 為嵌入式及物聯(lián)網(wǎng)設(shè)備提供了一個(gè)開發(fā)平臺(tái),具備Java SE 8 的靈活性硕并、可移植性和功能法焰。
2、Java SE Embedded 8使開發(fā)人員能夠使用Java SE 8為嵌入式設(shè)備建立更小的平臺(tái)鲤孵。
四、Java ME 8
1辰如、與Java SE 8一致的Java語言和API
2普监、支持最新的Web協(xié)議
3、全面的應(yīng)用模型
4琉兜、先進(jìn)的安全功能
5凯正、用于電源管理及多種標(biāo)準(zhǔn)外部設(shè)備交互的標(biāo)準(zhǔn)API
2、下載jdk 1.8
jdk下載官網(wǎng)網(wǎng)址:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
3豌蟋、安裝jdk 1.8
不要把jdk 1.8.0和jre1.8.0安裝在一個(gè)文件夾下
4廊散、配置環(huán)境變量
1、在系統(tǒng)變量中設(shè)置JAVA_HOME變量
2梧疲、在用戶變量中設(shè)置PATH變量
3允睹、在用戶變量中設(shè)置CLASS PATH變量
過程:
①系統(tǒng)變量→新建 JAVA_HOME 變量 。
變量值填寫jdk的安裝目錄(本人是 C:\Java\jdk1.8.0)
②系統(tǒng)變量→尋找 Path 變量→編輯
在變量值最后輸入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(注意原來Path的變量值末尾有沒有;號幌氮,如果沒有缭受,先輸入;號再輸入上面的代碼)
③系統(tǒng)變量→新建 CLASSPATH 變量
變量值填寫
.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一點(diǎn))
系統(tǒng)變量配置完畢该互。
在cmd下輸入java -version 查看當(dāng)前版本米者。
參考網(wǎng)址:
http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html
5、在Eclipse中使用JDK 8
Eclipse下載地址:http://www.eclipse.org/downloads/
6、lambda
6.1 lambda概述
</br>課程概要:
lambda概述
為什么使用lambda?
lambda語法
一蔓搞、lambda概述
表達(dá)了計(jì)算機(jī)中最基本的概念:調(diào)用和置換
二胰丁、為什么使用lambda
1、Java是面向?qū)ο蟮恼Z言喂分,不能像函數(shù)語言那樣嵌套定義方法
2锦庸、Java的匿名內(nèi)部只能存在于創(chuàng)建它的線程中,不能運(yùn)行在多線程中妻顶,無法充分應(yīng)用多核的硬件優(yōu)勢
3酸员、匿名內(nèi)部類的缺點(diǎn)還有:
1) 語法相對復(fù)雜
2) 在調(diào)用內(nèi)部類的上下文中,指引和this的只帶
3) 類加載和實(shí)例創(chuàng)建語法不可避免
4) 不能引用外部的非final對象
5) 不能抽象化控制流程
三讳嘱、lambda語法
</br>lambda的語法包括三部分
1幔嗦、參數(shù)列表
2、符號箭頭 "->"
3沥潭、代碼塊
6.2 lambda案例(上)
【案例】用lambda簡化Runnable接口的實(shí)現(xiàn)方式
public class Test_lambda{
public static void main(String[] args){
new Runnable(){
public void run(){
System.out.println("Anonymous Runnable Interface");
}
}.run();
}
}
public class Test_lambda{
public static void main(String[] args){
new Runnable(){
//使用匿名內(nèi)部類是無法使用外部變量的
//要使用必須改成常量
public void run(){
System.out.println("Anonymous Runnable Interface");
}
}.run();邀泉、
int i=1;
Runnable r=()->{
//lambda 可以使用外部變量
System.out.println("Use lambda to realize Runnable Interface");
//i++; 這樣的語法是錯(cuò)誤的,lambda不允許直接改變外部變量的值
System.out.println("i="+i);
};
r.run();
}
}
6.3 lambda案例(下)
【案例】lambda實(shí)現(xiàn)自定義接口钝鸽,模擬登入操作
public class Test_lambda_01{
//使用匿名內(nèi)部類實(shí)現(xiàn)
public static void main(String[] args){
new Action(){
public void execute(String content){
System.out.println(content);
}
}.execute("use anonymous inner class to realize entry before jdk 1.8");
}
// define one interface
static interface Action{
void execute(String content);
}
}
public class Test_lambda_01{
public static void main(String[] args){
new Action(){
public void execute(String content){
System.out.println(content);
}
}.execute("use anonymous inner class to realize entry before jdk 1.8");
//use lambda to realize entry
Action login=(String content)->{
System.out.println(content);
};
login.execute("use lambda to realize this function in jdk 1.8");
}
// define one interface
static interface Action{
// 定義一個(gè)方法execute
void execute(String content);
}
}
7汇恤、Stream 接口
</br>課程概要:
什么是Stream
什么是管道
什么是過濾器
一 、什么是Stream
1拔恰、Stream在Java 8中被定義為泛型接口
2因谎、Stream接口代表數(shù)據(jù)流
3、Stream不是一個(gè)數(shù)據(jù)結(jié)構(gòu)颜懊,不直接存儲(chǔ)數(shù)據(jù)
4财岔、Stream通過管道操作數(shù)據(jù)
5、創(chuàng)建Stream接口實(shí)現(xiàn)類對象
stream():創(chuàng)建一個(gè)Stream接口實(shí)現(xiàn)類的對象河爹。
例如:
//Person is a class defined by yourself
Stream<Person> stream=people.stream();
二匠璧、什么是管道
1、管道:代表一個(gè)操作序列
2咸这、管道包含一下組件:
1) 數(shù)據(jù)集:可能是集合夷恍、數(shù)組等
2) 零個(gè)或多個(gè)中間業(yè)務(wù)。如過濾器
3) 一個(gè)終端操作媳维,如forEach
三酿雪、什么是過濾器
1、過濾器:用給定的條件在源數(shù)據(jù)基礎(chǔ)上過濾出新的數(shù)據(jù)侄刽,并返回一個(gè)Stream對象
2执虹、過濾器包含匹配的謂詞
例如:判斷p對象是否是男性的lambda表達(dá)式
Stream<Person> stream=people.stream();
stream=stream.filter(p->p.getGender()=='男');
【案例】創(chuàng)建一個(gè)元素為Person類的集合:people
使用Stream和forEach顯示該集合對所有元素
先創(chuàng)建Person.java唠梨,再創(chuàng)建Test_collection_stream.java
package java_study;
public class Person {
public static enum Sex{
MALE,FEMALE;
}
private String name;
private Sex gender;
private int age;
private double height;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Sex getGender() {
return gender;
}
public void setGender(Sex gender) {
this.gender = gender;
}
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 Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, Sex gender, int age, double height) {
super();
this.name = name;
this.gender = gender;
this.age = age;
this.height = height;
}
@Override
public String toString() {
return "Person [name=" + name + ", gender=" + gender + ", age=" + age + ", height=" + height + "]";
}
}
package java_study;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;;
public class Test_collection_stream {
public static void main(String[] args) {
List<Person> people=createPeople();//initialize the list
Stream<Person> stream=people.stream();
stream.forEach(
p->System.out.println(p.toString())
);
}
static List<Person> createPeople(){
List<Person> people=new ArrayList<>();
Person p=new Person("zhangfei",Person.Sex.MALE,33,1.99);
people.add(p);
p=new Person("huangfei",Person.Sex.FEMALE,32,1.71);
people.add(p);
p=new Person("wangfei",Person.Sex.FEMALE,31,1.69);
people.add(p);
p=new Person("lifei",Person.Sex.MALE,33,1.89);
people.add(p);
return people;
}
}
8袋励、過濾器案例
【案例】創(chuàng)建一個(gè)元素為Person類的集合:people
Person [name="zhangfei", gender=FEMALE, age=32, height=1.69]
Person [name="lifei", gender=MALE, age=31, height=1.72]
依舊是先創(chuàng)建Person類
package java_study;
public class Person {
public static enum Sex{
MALE,FEMALE;
}
private String name;
private Sex gender;
private int age;
private double height;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Sex getGender() {
return gender;
}
public void setGender(Sex gender) {
this.gender = gender;
}
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 Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, Sex gender, int age, double height) {
super();
this.name = name;
this.gender = gender;
this.age = age;
this.height = height;
}
@Override
public String toString() {
return "Person [name=" + name + ", gender=" + gender + ", age=" + age + ", height=" + height + "]";
}
}
再創(chuàng)建Test_collection_fliter類
package java_study;
import java.util.ArrayList;
import java.util.List;
public class Test_collection_fliter {
public static void main(String[] args) {
List<Person> people=createPeople();//initialize the list
people.stream()
.filter(p->p.getGender()==Person.Sex.FEMALE)
.forEachOrdered(p->System.out.println(p.toString()));
}
static List<Person> createPeople(){
List<Person> people=new ArrayList<>();
Person p=new Person("zhangfei",Person.Sex.MALE,33,1.99);
people.add(p);
p=new Person("huangfei",Person.Sex.FEMALE,32,1.71);
people.add(p);
p=new Person("wangfei",Person.Sex.FEMALE,31,1.69);
people.add(p);
p=new Person("lifei",Person.Sex.MALE,33,1.89);
people.add(p);
return people;
}
}
9、DoubleStream接口
一、DoubleStream接口表示元素類型是double的數(shù)據(jù)源
</br>二茬故、DoubleStream接口的常用方法:
1盖灸、max().getAsDouble():獲取流中數(shù)據(jù)集的最大值
2、stream.min().getAsDouble():獲取流中數(shù)據(jù)集的最小值
3磺芭、stream.average():獲取流中數(shù)據(jù)集的平均值
【案例】統(tǒng)計(jì)people集合中姓名包含"fei"的平均身高
package java_study;
public class Person {
public static enum Sex{
MALE,FEMALE;
}
private String name;
private Sex gender;
private int age;
private double height;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Sex getGender() {
return gender;
}
public void setGender(Sex gender) {
this.gender = gender;
}
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 Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, Sex gender, int age, double height) {
super();
this.name = name;
this.gender = gender;
this.age = age;
this.height = height;
}
@Override
public String toString() {
return "Person [name=" + name + ", gender=" + gender + ", age=" + age + ", height=" + height + "]";
}
}
package java_study;
import java.util.ArrayList;
import java.util.List;
public class Test_collection_doublestream {
public static void main(String[] args) {
List<Person> people=createPeople();//initialize the list
double avgHeight=people.stream()
.filter(p->p.getName().indexOf("fei")>=0)
.mapToDouble(p->p.getHeight())
.average()
.getAsDouble();
System.out.println("the average height of these guys whose name includes 'fei' is "+avgHeight);
}
static List<Person> createPeople(){
List<Person> people=new ArrayList<>();
Person p=new Person("zhangfi",Person.Sex.MALE,33,1.99);
people.add(p);
p=new Person("huangfei",Person.Sex.FEMALE,32,1.71);
people.add(p);
p=new Person("wangfei",Person.Sex.FEMALE,31,1.69);
people.add(p);
p=new Person("life",Person.Sex.MALE,33,1.89);
people.add(p);
return people;
}
}
10赁炎、LocalDate類
</br>課程概要:
概述
常用方法
一、概述
LocalDate類使用ISO日歷表示年钾腺、月徙垫、日
二、LocalDate類的常用方法:
1放棒、LocalDate.now() :獲取系統(tǒng)當(dāng)前日期
2姻报、LocalDate.of(int year, int month, int dayOfMonth) 按指定日期創(chuàng)建LocalDate對象
3间螟、getYear():返回日期中的年份
4吴旋、getMonth():返回日期中的月份
5、getDayOfMonth():返回月份中的日
【案例】用LocalDate獲取當(dāng)前日期
package java_study;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class Test_LocalDate {
public static void main(String[] args){
LocalDate date = LocalDate.now();
System.out.print(date.getYear()+"年");
System.out.print(date.getMonthValue()+"月");
System.out.println(date.getDayOfMonth()+"日");
System.out.println(date.toString());
}
}
11厢破、LocalTime類
</br>課程概要:
概述
常用方法
一荣瑟、概述
LocalTime類用于表示一天中的時(shí)間
二、LocalTime類的常用方法:
1摩泪、LocalTime.now():獲取系統(tǒng)當(dāng)前時(shí)間
2笆焰、LocalTime.of(int hour, int minute, int second)
按指定時(shí)間創(chuàng)建LocalTime對象
3、getHour():返回小時(shí)
4见坑、getMinute():返回分鐘
5嚷掠、getSecond():返回秒
【案例】用LocalTime獲取當(dāng)前時(shí)間
package java_study;
import java.time.LocalTime;
public class Test_LocalTime {
public static void main(String[] args) {
LocalTime time=LocalTime.now();
System.out.print(time.getHour()+"時(shí)");
System.out.print(time.getMinute()+"分");
System.out.println(time.getSecond()+"秒");
System.out.println(time.toString());
}
}
12、LocalDateTime類
</br>課程概要:
概述
常用方法
一鳄梅、概述
LocalDateTime類用于表示日期和時(shí)間
二叠国、LocalDateTime類的常用方法:
1未檩、LocalDateTime.now():獲取系統(tǒng)當(dāng)前時(shí)間
2戴尸、LocalDateTime.of(int year, int month, int dayOfMonth)
按指定時(shí)間創(chuàng)建LocalDateTime對象
3冤狡、getYear():返回日期中的年份
4孙蒙、getMonth():返回日期中的月份
5、getDayOfMonth():返回月份中的日
【案例】用LocalDateTime獲取當(dāng)前日期和時(shí)間
package java_study;
import java.time.LocalDateTime;
public class Test_LocalDateTime {
public static void main(String[] args) {
LocalDateTime date=LocalDateTime.now();
System.out.print(date.getYear()+"年");
System.out.print(date.getMonthValue()+"月");
System.out.println(date.getDayOfMonth()+"日");
System.out.print(date.getHour()+"時(shí)");
System.out.print(date.getMinute()+"分");
System.out.println(date.getSecond()+"秒");
System.out.println(date.toString());
}
}
13悲雳、DateTimeFormatter類
</br>課程概要:
概述
常用方法
一挎峦、概述
DateTimeFormatter類用于將字符串解析為日期
二、常用方法
1合瓢、static ofPattern(String pattern);
作用:按pattern字符串指定的格式創(chuàng)建
DateTimeFormatter對象
2坦胶、LocalDateTime.parse(strDate, formatter);
【案例】將字符串"2014-04-01:13:24:01"格式化為一個(gè)LocalDateTime類的對象,并顯示年、月顿苇、日峭咒、時(shí)、分纪岁、秒
package java_study;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Test_DateTineFormatter {
public static void main(String[] args) {
String time="2014-04-01:13:24:01";
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyy-MM-dd:HH:mm:ss");
LocalDateTime date=LocalDateTime.parse(time, formatter);
System.out.println(date.toString());
}
}
14凑队、ZoneDateTime類
</br>課程概要:
概述
常用方法
一、概述
ZoneDateTime處理日期和時(shí)間與相應(yīng)的時(shí)區(qū)
二幔翰、常用方法
1漩氨、ZoneDateTime.now()
獲取系統(tǒng)當(dāng)前日期和事件
2、String format(DateTimeFormatter formatter)
按指定模板將日期對象格式化為一個(gè)字符串
【案例】將當(dāng)前日期格式化為字符串并顯示年遗增、月叫惊、日、時(shí)贡定、分赋访、秒
package java_study;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class Test_ZonedDateTime {
public static void main(String[] args) {
ZonedDateTime date=ZonedDateTime.now();
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("MM/dd/yyyy:HH:mm:ss");
String strDate=date.format(formatter);
System.out.println(strDate);
}
}