Java核心邏輯第12章JDK新特性_第1頁
Java核心邏輯第12章JDK新特性_第2頁
Java核心邏輯第12章JDK新特性_第3頁
Java核心邏輯第12章JDK新特性_第4頁
Java核心邏輯第12章JDK新特性_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第第12章章 jdk新特性新特性回顧回顧l class對象對象l 獲取類對象的方式獲取類對象的方式l 反射包反射包(java.lang.reflect)l 反射的作用反射的作用本章目標本章目標l靜態(tài)導(dǎo)入靜態(tài)導(dǎo)入l可變長參數(shù)可變長參數(shù)l格式化輸入輸出格式化輸入輸出l枚舉枚舉l注解注解ljdk6/jdk7新特性新特性本章結(jié)構(gòu)本章結(jié)構(gòu)jdk新特性新特性jdk6新特性新特性jdk7新特性新特性二進制字面值二進制字面值腳本支持腳本支持jdk5新特性新特性訪問訪問javac的的api可變長參數(shù)可變長參數(shù)格式化輸入格式化輸入/輸出輸出枚舉枚舉注解注解靜態(tài)導(dǎo)入靜態(tài)導(dǎo)入靜態(tài)導(dǎo)入靜態(tài)導(dǎo)入l通過靜態(tài)導(dǎo)入可以在使用一

2、個類型靜態(tài)成員的時候,不通過靜態(tài)導(dǎo)入可以在使用一個類型靜態(tài)成員的時候,不 用書寫類名,直接使用靜態(tài)成員即可用書寫類名,直接使用靜態(tài)成員即可l以前統(tǒng)一聲明常量時,很多人選擇在一個接口中聲明許多以前統(tǒng)一聲明常量時,很多人選擇在一個接口中聲明許多靜態(tài)常量,接口的用途是約定實現(xiàn)類有什么功能,用來聲靜態(tài)常量,接口的用途是約定實現(xiàn)類有什么功能,用來聲明常量顯然不合理,現(xiàn)在可以統(tǒng)一在一個類中聲明靜態(tài)常明常量顯然不合理,現(xiàn)在可以統(tǒng)一在一個類中聲明靜態(tài)常量,并且在需要的地方使用靜態(tài)導(dǎo)入量,并且在需要的地方使用靜態(tài)導(dǎo)入l注意:注意:靜態(tài)導(dǎo)入會降低程序的可讀性,不要過多使用!靜態(tài)導(dǎo)入會降低程序的可讀性,不要過多使用

3、!system.out.println(math.pi);system.out.println(math.abs(-1);靜態(tài)導(dǎo)入靜態(tài)導(dǎo)入import static java.lang.math.*;import static java.lang.system.*;public class teststatic public static void main(string args) system.out.println(pi);system.out.println(abs(-1);out.println(pi);可變長參數(shù)可變長參數(shù)l 可以使方法的參數(shù)個數(shù)可變可以使方法的參數(shù)個數(shù)可變publ

4、ic static void print(string s) system.out.println(s);public static void main(string args) print();print(tom);print(tom,cat);public static void print(string. s) for (string string : s) system.out.println(string);可變長參數(shù)可變長參數(shù)l 可變長參數(shù)其本質(zhì)實際上就是數(shù)組,但比定義數(shù)組更加靈可變長參數(shù)其本質(zhì)實際上就是數(shù)組,但比定義數(shù)組更加靈 活活public static void print

5、1(string s) public static void print(string. s) for (string ss : s) system.out.println(ss);可變長參數(shù)可變長參數(shù)l 可以把可以把main函數(shù)改寫成可變長參數(shù)函數(shù)改寫成可變長參數(shù) l 一個方法中最多有一個可變長參數(shù)一個方法中最多有一個可變長參數(shù) l 可變長參數(shù)必須作為方法的最后一個參數(shù)可變長參數(shù)必須作為方法的最后一個參數(shù)public static void main(string. args) print();print(tom);print(tom, cat);格式化的輸入格式化的輸入輸出輸出l jdk5

6、.0提供了新的輸入輸出語句提供了新的輸入輸出語句格式化輸出語句格式化輸出語句 system.out.printf()string的靜態(tài)方法:的靜態(tài)方法:static string format(string format, object. args)可以用來生成一個字符串,這個方法的用法和可以用來生成一個字符串,這個方法的用法和printf一模一樣,一模一樣,printf顯然在程序中毫無用途,顯然在程序中毫無用途,string.format方方法才是非常實用的,尤其在拼裝字符串時法才是非常實用的,尤其在拼裝字符串時string name = 張三;int age = 20;system.out

7、.printf(有個學(xué)生叫%s,他的年齡是%d。n, name, age);/ 創(chuàng)建格式化字符串string msg = string.format(有個學(xué)生叫%s,他的年齡是%d。, name, age);system.out.println(msg);格式化的輸入格式化的輸入輸出輸出l 提供了更為簡單的從命令行獲取輸入的工具類提供了更為簡單的從命令行獲取輸入的工具類java.util.scanner 不要關(guān)閉不要關(guān)閉scanner,如關(guān)閉了,則,如關(guān)閉了,則system.in也關(guān)閉了也關(guān)閉了當調(diào)用當調(diào)用nextint()等方法時如果拋出異常(等方法時如果拋出異常(inputmismatch

8、exception),則這個),則這個scanner對象不可以再繼續(xù)對象不可以再繼續(xù)使用,必須重新創(chuàng)建一個。使用,必須重新創(chuàng)建一個。scanner input = new scanner(system.in);int i = input.nextint();枚舉類型枚舉類型l 一個類所創(chuàng)建的對象個數(shù)是固定的一個類所創(chuàng)建的對象個數(shù)是固定的l 枚舉本質(zhì)上還是類枚舉本質(zhì)上還是類l enum關(guān)鍵字關(guān)鍵字enum season spring, summer, autumn, winterpublic class testenum public static void main(string args)

9、season season = season.spring;枚舉類型枚舉類型l 在沒有枚舉類型前在沒有枚舉類型前 ,可以通過如下代碼模擬枚舉類型,可以通過如下代碼模擬枚舉類型public class testseason public static void main(string args) season season = season.spring;class season public static final season spring = new season();public static final season summer = new season();public stat

10、ic final season autumn = new season();public static final season winter = new season();private season() 枚舉特點枚舉特點l 枚舉類型的父類枚舉類型的父類 java.lang.enum name()ordinal()public class testenum1 public static void main(string args) season s = season.spring;system.out.println(();/ springsystem.out.println(s

11、.ordinal();/ 0enum season spring, summer, autumn, winter枚舉特點枚舉特點l 枚舉類型的父類枚舉類型的父類 java.lang.enum static t extends enum t valueof(class enumtype, string name) 極重要的一個靜態(tài)方法,極重要的一個靜態(tài)方法,valueof,可以用字符串來找到對應(yīng)枚舉,可以用字符串來找到對應(yīng)枚舉對象。對象。public class testenum2 public static void main(string args) season season = enum

12、.valueof(season.class, spring);system.out.println(();枚舉特點枚舉特點 values()public class testenum3 public static void main(string args) season seasons = season.values();for (season season : seasons) system.out.println(name is + () + ,ordinal + season.ordinal();枚舉特點枚舉特點l 枚舉類型可以定義屬性,并提

13、供相應(yīng)的方法枚舉類型可以定義屬性,并提供相應(yīng)的方法enum season spring, summer, autumn, winter;private string name;public string getname() return name;public void setname(string name) = name;枚舉特點枚舉特點public class testenum public static void main(string args) season s = season.spring;s.setname(tomcat);system.out.print

14、ln(s.getname();枚舉特點枚舉特點l 枚舉類型有構(gòu)造方法枚舉類型有構(gòu)造方法 但只能是私有的但只能是私有的 l 枚舉類型可以顯示提供構(gòu)造方法枚舉類型可以顯示提供構(gòu)造方法enum season spring, summer, autumn, winter枚舉特點枚舉特點enum season spring(春天), summer(夏天), autumn(秋天), winter(冬天);private string name;season(string name) = name;public string getname() return name;public voi

15、d setname(string name) = name;枚舉特點枚舉特點l 枚舉不能夠繼承枚舉不能夠繼承l(wèi) 枚舉類型默認是枚舉類型默認是final修飾符修飾,也是不能被別的類繼承修飾符修飾,也是不能被別的類繼承l(wèi) 枚舉可以提供抽象方法枚舉可以提供抽象方法l枚舉支持枚舉支持switch case語句(語句(java7中字符串也支持)中字符串也支持)l枚舉是枚舉是絕對的單例絕對的單例,絕不會出現(xiàn)多個實例,即使反序列化,絕不會出現(xiàn)多個實例,即使反序列化都無法創(chuàng)建多個實例,用枚舉來做單例非常簡單直接且好都無法創(chuàng)建多個實例,用枚舉來做單例非常簡單直接且好用。用。枚舉特點枚舉特點e

16、num operator add public double calculate(double a, double b) return a+b; , substract public double calculate(double a, double b) return a-b; , multiply public double calculate(double a, double b) return a*b; , divied/省略代碼; public abstract double calculate(double a,double b);枚舉特點枚舉特點public class test

17、enum public static void main(string args) operator o = operator.add;system.out.println(o.calculate(1, 2);注解注解(annotation)l 注解的概念注解的概念 給程序員看的是注釋(單行注釋、多行注釋、給程序員看的是注釋(單行注釋、多行注釋、doc注釋)注釋) l 注解名注解名l jdk中提供的注解中提供的注解overridedeprecatedsupperesswarnings注解注解l 覆蓋覆蓋tostring()方法方法public class worker private stri

18、ng name;public void m1() public string tostring() return name;注解注解l 使用注解后,編譯器可以檢查覆蓋方法是否正確使用注解后,編譯器可以檢查覆蓋方法是否正確public class worker private string name;public void m1() overridepublic string tostirng() return name;注解注解l 注解的分類注解的分類標記注解標記注解單值注解單值注解多值多值/普通注解普通注解l 注解的父類注解的父類 java.lang.annotation.annotatio

19、nl 自定義注解自定義注解public interface 注解名注解名 public interface test注解注解l 元注解元注解target限定注解的使用目標enum elementtype type, field, method, parameter, constructor, local_variable, annotation_type, package注解注解l 元注解元注解retention指明注解信息的保存時間指明注解信息的保存時間enum retentionpolicy source:注解信息只保存在源程序中,在類文件中不保存:注解信息只保存在源程序中,在類文件中不保

20、存 class (default):注解信息保存在類文件中,程序運行時:注解信息保存在類文件中,程序運行時不能通過反射找到不能通過反射找到 runtime:注解保存在類文件中,程序運行時通過反射:注解保存在類文件中,程序運行時通過反射api可以找到可以找到注解注解l 完整的注解定義完整的注解定義target(value = elementtype.type )retention(value = retentionpolicy.runtime)interface first firstpublic class testannotation private string name;public v

21、oid m1() 注解注解l 注解屬性注解屬性target(value = elementtype.type )retention(value = retentionpolicy.runtime)interface first string value();first(test)public class testannotation private string name;public void m1() 注解注解l 注解屬性的類型共有注解屬性的類型共有24種種基本類型基本類型, string, class, enums, annotations, 以及它們的數(shù)組以及它們的數(shù)組注解案例注解案例

22、l 通過注解設(shè)計一個自動測試的工具通過注解設(shè)計一個自動測試的工具public class testmethod test(parameter = corejava)public void m1(string s1) system.out.println(method m1 + s1);public void m2(string s2) system.out.println(method m2 + s2);注解案例注解案例l test注解的設(shè)計注解的設(shè)計target( elementtype.method )retention(retentionpolicy.runtime)public int

23、erface test string parameter();注解案例注解案例l 自動測試工具類的設(shè)計自動測試工具類的設(shè)計如何得知這個類擁有如何得知這個類擁有test注解?注解?如何獲得如何獲得test注解中的參數(shù)?注解中的參數(shù)?如何運行擁有注解的方法?如何運行擁有注解的方法?注解案例注解案例public class testannotation public static void main(string args) throws exception / 獲得反射需要的類對象class c = testmethod.class;testmethod t = (testmethod) c.ne

24、winstance();/ 獲得所有的方法method m = c.getdeclaredmethods();for (method mm : m) / 判斷哪個方法擁有test標注if (mm.isannotationpresent(test.class) / 獲得test標注test tt = mm.getannotation(test.class);/ 獲得parameter屬性的值string name = tt.parameter();mm.invoke(t, name);java se 6: 腳本支持腳本支持l為開發(fā)者提供了在同一應(yīng)用中使用不同語言的能力為開發(fā)者提供了在同一應(yīng)用中使用不同語言的能力l使用使用java庫擴展腳本語言庫擴展腳本語言lsun的的sdk中提供了中提供了javascript引擎引擎mozila rhino引擎引擎l引擎在引擎在中中l(wèi)示例:示例:/ 創(chuàng)建腳本引擎管理器scriptengi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論