九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

Java基礎(chǔ) 加強課件.ppt

上傳人:小** 文檔編號:22199270 上傳時間:2021-05-22 格式:PPT 頁數(shù):33 大?。?68KB
收藏 版權(quán)申訴 舉報 下載
Java基礎(chǔ) 加強課件.ppt_第1頁
第1頁 / 共33頁
Java基礎(chǔ) 加強課件.ppt_第2頁
第2頁 / 共33頁
Java基礎(chǔ) 加強課件.ppt_第3頁
第3頁 / 共33頁

下載文檔到電腦,查找使用更方便

5 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《Java基礎(chǔ) 加強課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《Java基礎(chǔ) 加強課件.ppt(33頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 Java基 礎(chǔ) 加 強講 師 : 黎 活 明 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 課 程 大 綱l eclipse的 使 用 技 巧l 靜 態(tài) 導(dǎo) 入l 可 變 參 數(shù) 與 for循 環(huán) 增 強l 基 本 數(shù) 據(jù) 類 型 的 自 動 拆 箱 與 裝 箱l 枚 舉l 反 射l JavaBean內(nèi) 省 l beanutils工 具 包l 注 解l 泛 型l 類 加 載 器l 代 理 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 e

2、clipse的 使 用 技 巧快 捷 鍵 使 用 技 巧 : 快 捷 鍵 的 位 置 : window-preferences-General-Keys:l 最 常 用 eclipse快 捷 鍵l 內(nèi) 容 提 示 Alt+/l 添 加 塊 注 釋 Ctrl+Shift+/l 除 去 塊 注 釋 Ctrl+Shift+l 復(fù) 制 行 Ctrl+Alt+向 下 鍵l 更 改 為 大 寫 Ctrl+Shift+Xl 更 改 為 小 寫 Ctrl+Shift+Y l 類 和 方 法 說 明 F2 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 靜 態(tài) 導(dǎo) 入impo

3、rt static語 句 導(dǎo) 入 一 個 類 中 的 某 個 或 所 有 靜 態(tài) 方 法l 語 法 舉 例 : import static java.lang.Math.random;import static java.lang.Math.*; public static void main(String args) System.out.println(random()*100);import static語 句 導(dǎo) 入 一 個 類 中 的 靜 態(tài) 成 員 變 量 l 語 法 舉 例 : public class Constant public static String content

4、= itcast; import static cn.itcast.Constant.content; 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 增 強 for循 環(huán)l 語 法 :for ( type 變 量 名 : 集 合 變 量 名 ) l 注 意 事 項 :迭 代 變 量 必 須 在 ( )中 定 義 !集 合 變 量 可 以 是 數(shù) 組 或 實 現(xiàn) 了 Iterable接 口 的 集 合 類l 舉 例 : public static int add(int x,int .args) int sum = x;for(int arg:args) s

5、um += arg; return sum; 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 可 變 參 數(shù)l 可 變 參 數(shù) 的 特 點 :只 能 出 現(xiàn) 在 參 數(shù) 列 表 的 最 后 ;.位 于 變 量 類 型 和 變 量 名 之 間 , 前 后 有 無 空 格 都 可 以 ;調(diào) 用 可 變 參 數(shù) 的 方 法 時 , 編 譯 器 為 該 可 變 參 數(shù) 隱 含 創(chuàng) 建一 個 數(shù) 組 , 在 方 法 體 中 以 數(shù) 組 的 形 式 訪 問 可 變 參 數(shù) 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 基 本 數(shù)

6、 據(jù) 類 型 的 自 動 拆 箱 與 裝 箱l 自 動 裝 箱 :Integer num1 = 12;l 自 動 拆 箱 :Int num = new Integer(23);l 基 本 Boolean/Byte/Integer(數(shù) 值 范 圍 : -128至 127)數(shù) 據(jù) 類 型 的 對 象 緩 存 :Integer num1 = 12;Integer num2 = 12;System.out.println(num1 = num2);Integer num3 = 129;Integer num4 = 129;System.out.println(num3 = num4); 高 級 軟 件

7、 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 枚 舉使 用 枚 舉 的 關(guān) 鍵 技 術(shù) 如 下 : 1: enum關(guān) 鍵 字 表 示 枚 舉 類 型 , 它 的 作 用 相 當(dāng) 于 類 聲 明 中 的 class關(guān) 鍵 字 。 2:枚 舉 類 型 不 能 有 public的 構(gòu) 造 方 法 。 3:所 有 的 枚 舉 值 都 是 public、 static、 final的 , 這 些 修 飾 符 都 是 自 動 加 上 , 無 須 程序 員 手 動 添 加 。 4:枚 舉 之 間 用 “ , ” 分 開 , 最 好 一 個 枚 舉 值 用 分 號 “ ; ” 。 5:

8、每 一 個 枚 舉 值 是 一 個 枚 舉 類 型 的 實 例 。 6:可 以 在 枚 舉 類 型 定 義 非 枚 舉 值 變 量 , 這 些 變 量 可 以 使 用 任 何 修 飾 符 。 7:變 量 和 方 法 的 定 義 必 須 在 枚 舉 值 后 面 定 義 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 枚 舉 的 高 級 應(yīng) 用l 枚 舉 就 相 當(dāng) 于 一 個 類 , 其 中 也 可 以 定 義 構(gòu) 造 方 法 、 成 員 變 量 、 普 通 方 法 和 抽象 方 法 。l 枚 舉 元 素 必 須 位 于 枚 舉 體 中 的 最 開 始 部

9、 分 , 枚 舉 元 素 列 表 的 后 要 有 分 號 與 其他 成 員 分 隔 。 把 枚 舉 中 的 成 員 方 法 或 變 量 等 放 在 枚 舉 元 素 的 前 面 , 編 譯 器 報告 錯 誤 。l 帶 構(gòu) 造 方 法 的 枚 舉 構(gòu) 造 方 法 必 須 定 義 成 私 有 的 如 果 有 多 個 構(gòu) 造 方 法 , 該 如 何 選 擇 哪 個 構(gòu) 造 方 法 ? 枚 舉 元 素 MON和 MON( ) 的 效 果 一 樣 , 都 是 調(diào) 用 默 認 的 構(gòu) 造 方 法 。l 帶 方 法 的 枚 舉 定 義 枚 舉 TrafficLamp 實 現(xiàn) 普 通 的 next方 法 實 現(xiàn)

10、 抽 象 的 next方 法 : 每 個 元 素 分 別 是 由 枚 舉 類 的 子 類 來 生 成 的 實 例 對 象 , 這 些 子 類 采 用 類 似 內(nèi) 部 類的 方 式 進 行 定 義 。 增 加 上 表 示 時 間 的 構(gòu) 造 方 法l 枚 舉 只 有 一 個 成 員 時 , 就 可 以 作 為 一 種 單 例 的 實 現(xiàn) 方 式 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 反 射 的 基 石 Class類l Java程 序 中 的 各 個 Java類 屬 于 同 一 類 事 物 , 描 述 這 類 事 物 的 Java類 名 就 是 C

11、lass。l 對 比 提 問 : 眾 多 的 人 用 一 個 什 么 類 表 示 ? 眾 多 的 Java類 用 一 個 什 么 類 表 示 ? 人 Person Java類 Classl 對 比 提 問 : Person類 代 表 人 , 它 的 實 例 對 象 就 是 張 三 , 李 四 這 樣 一 個 個 具 體 的人 , Class類 代 表 Java類 , 它 的 各 個 實 例 對 象 又 分 別 對 應(yīng) 什 么 呢 ? 對 應(yīng) 各 個 類 在 內(nèi) 存 中 的 字 節(jié) 碼 , 例 如 , Person類 的 字 節(jié) 碼 , ArrayList類 的 字 節(jié) 碼 , 等 等 。 一

12、個 類 被 類 加 載 器 加 載 到 內(nèi) 存 中 , 占 用 一 片 存 儲 空 間 , 這 個 空 間 里 面 的 內(nèi) 容 就 是 類 的 字 節(jié) 碼 , 不 同 的類 的 字 節(jié) 碼 是 不 同 的 , 所 以 它 們 在 內(nèi) 存 中 的 內(nèi) 容 是 不 同 的 , 這 一 個 個 的 空 間 可 分 別 用 一 個 個 的 對 象 來表 示 , 這 些 對 象 顯 然 具 有 相 同 的 類 型 , 這 個 類 型 是 什 么 呢 ?l 如 何 得 到 各 個 字 節(jié) 碼 對 應(yīng) 的 實 例 對 象 ( Class類 型 ) 類 名 .class, 例 如 , System.class

13、 對 象 .getClass(), 例 如 , new Date().getClass() Class.forName(類 名 ), 例 如 , Class.forName(java.util.Date);l 九 個 預(yù) 定 義 Class實 例 對 象 : 參 看 Class.isPrimitive方 法 的 幫 助 Int.class = Integer.TYPEl 數(shù) 組 類 型 的 Class實 例 對 象 Class.isArray()l 總 之 , 只 要 是 在 源 程 序 中 出 現(xiàn) 的 類 型 , 都 有 各 自 的 Class實 例 對 象 , 例 如 , int, voi

14、d 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 反 射 l 反 射 就 是 把 Java類 中 的 各 種 成 分 映 射 成 相 應(yīng) 的 java類 。 例 如 , 一個 Java類 中 用 一 個 Class類 的 對 象 來 表 示 , 一 個 類 中 的 組 成 部 分 :成 員 變 量 , 方 法 , 構(gòu) 造 方 法 , 包 等 等 信 息 也 用 一 個 個 的 Java類 來表 示 , 就 像 汽 車 是 一 個 類 , 汽 車 中 的 發(fā) 動 機 , 變 速 箱 等 等 也 是 一個 個 的 類 。 表 示 java類 的 Class類

15、顯 然 要 提 供 一 系 列 的 方 法 , 來獲 得 其 中 的 變 量 , 方 法 , 構(gòu) 造 方 法 , 修 飾 符 , 包 等 信 息 , 這 些 信息 就 是 用 相 應(yīng) 類 的 實 例 對 象 來 表 示 , 它 們 是 Field、 Method、Contructor、 Package等 等 。 l 一 個 類 中 的 每 個 成 員 都 可 以 用 相 應(yīng) 的 反 射 API類 的 一 個 實 例 對 象來 表 示 , 通 過 調(diào) 用 Class類 的 方 法 可 以 得 到 這 些 實 例 對 象 后 , 得到 這 些 實 例 對 象 后 有 什 么 用 呢 ? 怎 么 用

16、 呢 ? 這 正 是 學(xué) 習(xí) 和 應(yīng) 用 反射 的 要 點 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 Constructor類l Constructor類 代 表 某 個 類 中 的 一 個 構(gòu) 造 方 法l 得 到 某 個 類 所 有 的 構(gòu) 造 方 法 :例 子 : Constructor constructors= Class.forName(java.lang.String).getConstructors();l 得 到 某 一 個 構(gòu) 造 方 法 :例 子 : Constructor constructor = Class.forNam

17、e(“java.lang.String”).getConstructor(StringBuffer.class);/獲 得 方 法 時 要 用 到 類 型l 創(chuàng) 建 實 例 對 象 :通 常 方 式 : String str = new String(new StringBuffer(abc);反 射 方 式 : String str = (String)constructor.newInstance(new StringBuffer(abc);/調(diào) 用 獲 得 的 方 法 時 要 用 到 上 面 相 同 類 型 的 實 例 對 象 l Class.newInstance()方 法 :例 子

18、: String obj = (String)Class.forName(java.lang.String).newInstance();該 方 法 內(nèi) 部 先 得 到 默 認 的 構(gòu) 造 方 法 , 然 后 用 該 構(gòu) 造 方 法 創(chuàng) 建 實 例 對 象 。該 方 法 內(nèi) 部 的 具 體 代 碼 是 怎 樣 寫 的 呢 ? 用 到 了 緩 存 機 制 來 保 存 默 認 構(gòu) 造 方 法 的 實 例對 象 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 Field類l Field類 代 表 某 個 類 中 的 一 個 成 員 變 量l 演 示 用 ecl

19、ipse自 動 生 成 Java類 的 構(gòu) 造 方 法l 問 題 : 得 到 的 Field對 象 是 對 應(yīng) 到 類 上 面 的 成 員 變 量 , 還 是 對 應(yīng) 到對 象 上 的 成 員 變 量 ? 類 只 有 一 個 , 而 該 類 的 實 例 對 象 有 多 個 , 如 果是 與 對 象 關(guān) 聯(lián) , 哪 關(guān) 聯(lián) 的 是 哪 個 對 象 呢 ? 所 以 字 段 fieldX 代 表 的 是x的 定 義 , 而 不 是 具 體 的 x變 量 。l 示 例 代 碼 :ReflectPoint point = new ReflectPoint(1,7);Field y = Class.for

20、Name(cn.itcast.corejava.ReflectPoint).getField(y);System.out.println(y.get(point); /Field x = Class.forName(cn.itcast.corejava.ReflectPoint).getField(x);Field x = Class.forName(cn.itcast.corejava.ReflectPoint).getDeclaredField(x);x.setAccessible(true);System.out.println(x.get(point);l 作 業(yè) : 將 任 意 一

21、個 對 象 中 的 所 有 String類 型 的 成 員 變 量 所 對 應(yīng) 的 字符 串 內(nèi) 容 中 的 b改 成 a。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 Method類l Method類 代 表 某 個 類 中 的 一 個 成 員 方 法l 得 到 類 中 的 某 一 個 方 法 :例 子 : Method charAt = Class.forName(java.lang.String).getMethod(charAt, int.class);l 調(diào) 用 方 法 :通 常 方 式 : System.out.println(str.cha

22、rAt(1);反 射 方 式 : System.out.println(charAt.invoke(str, 1); 如 果 傳 遞 給 Method對 象 的 invoke()方 法 的 第 一 個 參 數(shù) 為 null, 這 有 著 什 么 樣 的 意 義 呢 ? 說 明該 Method對 象 對 應(yīng) 的 是 一 個 靜 態(tài) 方 法 ! l jdk1.4和 jdk1.5的 invoke方 法 的 區(qū) 別 :Jdk1.5: public Object invoke(Object obj,Object. args)Jdk1.4: public Object invoke(Object obj,

23、Object args), 即 按 jdk1.4的 語 法 ,需 要 將 一 個 數(shù) 組 作 為 參 數(shù) 傳 遞 給 invoke方 法 時 , 數(shù) 組 中 的 每 個 元 素 分 別 對 應(yīng) 被調(diào) 用 方 法 中 的 一 個 參 數(shù) , 所 以 , 調(diào) 用 charAt方 法 的 代 碼 也 可 以 用 Jdk1.4改 寫 為 charAt.invoke(“str”, new Object1)形 式 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 內(nèi) 省 了 解 JavaBeanl JavaBean是 一 種 特 殊 的 Java類 , 主 要 用 于

24、 傳 遞 數(shù) 據(jù) 信 息 , 這 種 java類 中 的 方 法 主 要 用 于 訪 問 私 有 的字 段 , 且 方 法 名 符 合 某 種 命 名 規(guī) 則 。l 如 果 要 在 兩 個 模 塊 之 間 傳 遞 多 個 信 息 , 可 以 將 這 些 信 息 封 裝 到 一 個 JavaBean中 , 這 種 JavaBean的 實例 對 象 通 常 稱 之 為 值 對 象 ( Value Object, 簡 稱 VO) 。 這 些 信 息 在 類 中 用 私 有 字 段 來 存 儲 , 如 果 讀取 或 設(shè) 置 這 些 字 段 的 值 , 則 需 要 通 過 一 些 相 應(yīng) 的 方 法 來

25、 訪 問 , 大 家 覺 得 這 些 方 法 的 名 稱 叫 什 么 好 呢 ?JavaBean的 屬 性 是 根 據(jù) 其 中 的 setter和 getter方 法 來 確 定 的 , 而 不 是 根 據(jù) 其 中 的 成 員 變 量 。 如 果 方 法名 為 setId, 中 文 意 思 即 為 設(shè) 置 id, 至 于 你 把 它 存 到 哪 個 變 量 上 , 用 管 嗎 ? 如 果 方 法 名 為 getId, 中 文意 思 即 為 獲 取 id, 至 于 你 從 哪 個 變 量 上 取 , 用 管 嗎 ? 去 掉 set前 綴 , 剩 余 部 分 就 是 屬 性 名 , 如 果 剩 余

26、部 分 的 第 二 個 字 母 是 小 寫 的 , 則 把 剩 余 部 分 的 首 字 母 改 成 小 的 。 setId()的 屬 性 名 id isLast()的 屬 性 名 last setCPU的 屬 性 名 是 什 么 ?CPU getUPS的 屬 性 名 是 什 么 ? UPS 總 之 , 一 個 類 被 當(dāng) 作 javaBean使 用 時 , JavaBean的 屬 性 是 根 據(jù) 方 法 名 推 斷 出 來 的 , 它 根 本 看 不 到j(luò)ava類 內(nèi) 部 的 成 員 變 量 。l 一 個 符 合 JavaBean特 點 的 類 可 以 當(dāng) 作 普 通 類 一 樣 進 行 使

27、用 , 但 把 它 當(dāng) JavaBean用 肯 定 需 要 帶 來 一 些額 外 的 好 處 , 我 們 才 會 去 了 解 和 應(yīng) 用 JavaBean! 好 處 如 下 : 在 Java EE開 發(fā) 中 , 經(jīng) 常 要 使 用 到 JavaBean。 很 多 環(huán) 境 就 要 求 按 JavaBean方 式 進 行 操 作 , 別人 都 這 么 用 和 要 求 這 么 做 , 那 你 就 沒 什 么 挑 選 的 余 地 ! JDK中 提 供 了 對 JavaBean進 行 操 作 的 一 些 API, 這 套 API就 稱 為 內(nèi) 省 。 如 果 要 你 自 己 去 通 過getX方 法 來

28、 訪 問 私 有 的 x, 怎 么 做 , 有 一 定 難 度 吧 ? 用 內(nèi) 省 這 套 api操 作 JavaBean比 用 普 通 類 的方 式 更 方 便 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 內(nèi) 省 綜 合 案 例PropertyDescriptor propertyDescriptors = Introspector.getBeanInfo(clazz).getPropertyDescriptors();for(PropertyDescriptor propertydesc : propertyDescriptors)Method

29、method = propertydesc.getReadMethod();/獲 取 屬 性 的 get方 法 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 Commons-beanutils將 字 符 串 轉(zhuǎn) 換 成 給 定 類 型 的 值ConvertUtils.convert(String value, Class clazz)為 bean中 的 指 定 屬 性 賦 值BeanUtils.copyProperty(form, name, 經(jīng) 濟 );將 指 定 bean中 的 屬 性 值 拷 貝 到 目 標(biāo) bean中 同 名 的 屬 性BeanUt

30、ils.copyProperties(dest, orig)將 Map中 的 值 拷 貝 到 目 標(biāo) bean中 與 key同 名 的 屬 性PersonForm form = new PersonForm();Map properties = new HashMap(); properties.put(id, 56);properties.put(name, liming);BeanUtils.populate(form, properties); 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 了 解 注 解 及 java提 供 的 幾 個 基 本 注

31、解l 先 通 過 SuppressWarnings的 應(yīng) 用 讓 大 家 直 觀 地 了 解 注 解 : 通 過 System.runFinalizersOnExit(true);的 編 譯 警 告 引 出SuppressWarnings(deprecation) l Deprecated 直 接 在 剛 才 的 類 中 增 加 一 個 方 法 , 并 加 上 Deprecated標(biāo) 注 , 在 另 外 一 個 類 中 調(diào) 用 這 個 方法 。l Override public boolean equals(Reflect other)方 法 與 HashSet結(jié) 合 講 解 l 總 結(jié) :注

32、 解 相 當(dāng) 于 一 種 標(biāo) 記 , 在 程 序 中 加 了 注 解 就 等 于 為 程 序 打 上 了 某 種 標(biāo) 記 , 沒 加 , 則等 于 沒 有 某 種 標(biāo) 記 , 以 后 , javac編 譯 器 , 開 發(fā) 工 具 和 其 他 程 序 可 以 用 反 射 來 了 解 你的 類 及 各 種 元 素 上 有 無 何 種 標(biāo) 記 , 看 你 有 什 么 標(biāo) 記 , 就 去 干 相 應(yīng) 的 事 。 標(biāo) 記 可 以 加在 包 , 類 , 字 段 , 方 法 , 方 法 的 參 數(shù) 以 及 局 部 變 量 上 ???java.lang包 , 可 看 到 JDK中 提 供 的 最 基 本 的

33、annotation。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 自 定 義 注 解 及 其 應(yīng) 用l 定 義 一 個 最 簡 單 的 注 解 : public interface MyAnnotation l 把 它 加 在 某 個 類 上 : MyAnnotation public class AnnotationTestl 用 反 射 進 行 測 試 AnnotationTest的 定 義 上 是 否 有 MyAnnotation l 根 據(jù) 發(fā) 射 測 試 的 問 題 , 引 出 Retention元 注 解 的 講 解 , 其 三 種 取 值

34、 :RetetionPolicy.SOURCE、 RetetionPolicy.CLASS、RetetionPolicy.RUNTIME;分 別 對 應(yīng) : java源 文 件 -class文 件 -內(nèi) 存 中 的字 節(jié) 碼 。 思 考 : Override、 SuppressWarnings和 Deprecated這 三 個 注 解 的 屬 性 值 分 別 是 什么 ?l 演 示 和 講 解 Target元 注 解 Target的 默 認 值 為 任 何 元 素 , 設(shè) 置 Target等 于 ElementType.METHOD, 原 來 加 在 類 上 的 注解 就 報 錯 了 , 改

35、為 用 數(shù) 組 方 式 設(shè) 置 ElementType.METHOD,ElementType.TYPE就 可 以 了 。 l 元 注 解 以 及 其 枚 舉 屬 性 值 不 用 記 , 只 要 會 看 jdk提 供 那 幾 個 基 本 注 解 的 API幫 助 文 檔 的 定 義 或 其 源 代 碼 , 按 圖 索 驥 即 可 查 到 , 或 者 直 接 看java.lang.annotation包 下 面 的 類 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 為 注 解 增 加 基 本 屬 性l 什 么 是 注 解 的 屬 性 一 個 注 解 相 當(dāng)

36、 于 一 個 胸 牌 , 如 果 你 胸 前 貼 了 胸 牌 , 就 是 傳 智 播 客 的 學(xué) 生 , 否 則 , 就 不 是 。 如 果 還想 區(qū) 分 出 是 傳 智 播 客 哪 個 班 的 學(xué) 生 , 這 時 候 可 以 為 胸 牌 在 增 加 一 個 屬 性 來 進 行 區(qū) 分 。 加 了 屬 性 的標(biāo) 記 效 果 為 : MyAnnotation(color=red)l 定 義 基 本 類 型 的 屬 性 和 應(yīng) 用 屬 性 : 在 注 解 類 中 增 加 String color(); MyAnnotation(color=red)l 用 反 射 方 式 獲 得 注 解 對 應(yīng) 的

37、 實 例 對 象 后 , 再 通 過 該 對 象 調(diào) 用 屬 性 對 應(yīng) 的 方 法 MyAnnotation a = (MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class); System.out.println(a.color(); 可 以 認 為 上 面 這 個 MyAnnotation是 MyAnnotaion類 的 一 個 實 例 對 象 l 為 屬 性 指 定 缺 省 值 : String color() default yellow;l value屬 性 : String value() defau

38、lt zxx; 如 果 注 解 中 有 一 個 名 稱 為 value的 屬 性 , 且 你 只 想 設(shè) 置 value屬 性 ( 即 其 他 屬 性 都 采 用 默 認 值 或 者你 只 有 一 個 value屬 性 ) , 那 么 可 以 省 略 value=部 分 , 例 如 : MyAnnotation(lhm)。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 為 注 解 增 加 高 級 屬 性l 數(shù) 組 類 型 的 屬 性int arrayAttr() default 1,2,3;MyAnnotation(arrayAttr=2,3,4)如 果

39、數(shù) 組 屬 性 中 只 有 一 個 元 素 , 這 時 候 屬 性 值 部 分 可 以 省 略 大 括l 枚 舉 類 型 的 屬 性Gender gender() ;MyAnnotation(gender=Gender.MAN)l 注 解 類 型 的 屬 性 :MetaAnnotation annotationAttr() default MetaAnnotation(xxxx);MyAnnotation(annotationAttr=MetaAnnotation(“yyy”) )可 以 認 為 上 面 這 個 MyAnnotation是 MyAnnotaion類 的 一 個 實 例 對 象

40、, 同 樣 的 道 理 ,可 以 認 為 上 面 這 個 MetaAnnotation是 MetaAnnotation類 的 一 個 實 例 對 象 , 調(diào) 用 代碼 如 下 : MetaAnnotation ma = myAnnotation.annotationAttr();System.out.println(ma.value(); 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 體 驗 泛 型l Jdk 1.5以 前 的 集 合 類 中 存 在 什 么 問 題ArrayList collection = new ArrayList();collect

41、ion.add(1);collection.add(1L);collection.add(abc);int i = (Integer)arrayList.get(1);/編 譯 要 強 制 類 型 轉(zhuǎn) 換 且 運 行 時 出 錯 !l Jdk 1.5的 集 合 類 希 望 你 在 定 義 集 合 時 , 明 確 表 示 你 要 向 集 合 中 裝 哪 種 類 型的 數(shù) 據(jù) , 無 法 加 入 指 定 類 型 以 外 的 數(shù) 據(jù)ArrayList collection2 = new ArrayList();collection2.add(1);/*collection2.add(1L);coll

42、ection2.add(“abc”);*/這 兩 行 代 碼 編 譯 時 就 報 告 了 語 法 錯 誤 int i2 = collection2.get(0);/不 需 要 再 進 行 類 型 轉(zhuǎn) 換l 泛 型 是 提 供 給 javac編 譯 器 使 用 的 , 可 以 限 定 集 合 中 的 輸 入 類 型 , 讓 編 譯 器擋 住 源 程 序 中 的 非 法 輸 入 , 編 譯 器 編 譯 帶 類 型 說 明 的 集 合 時 會 去 除 掉 “ 類型 ” 信 息 , 使 程 序 運 行 效 率 不 受 影 響 , 對 于 參 數(shù) 化 的 泛 型 類 型 , getClass()方 法

43、的 返 回 值 和 原 始 類 型 完 全 一 樣 。 由 于 編 譯 生 成 的 字 節(jié) 碼 會 去 掉 泛 型 的類 型 信 息 , 只 要 能 跳 過 編 譯 器 , 就 可 以 往 某 個 泛 型 集 合 中 加 入 其 它 類 型 的數(shù) 據(jù) , 例 如 , 用 反 射 得 到 集 合 , 再 調(diào) 用 其 add方 法 即 可 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 了 解 泛 型l ArrayList類 定 義 和 ArrayList類 引 用 中 涉 及 如 下 術(shù) 語 : 整 個 稱 為 ArrayList泛 型 類 型 Array

44、List中 的 E稱 為 類 型 參 數(shù) 變 量 整 個 ArrayList稱 為 參 數(shù) 化 的 類 型 ArrayList中 的 Integer稱 為 類 型 參 數(shù) 變 量 的 值 或 實 際 類 型 參 數(shù) ArrayList中 的 念 著 typeof ArrayList稱 為 原 始 類 型l 參 數(shù) 化 類 型 與 原 始 類 型 的 兼 容 性 : 參 數(shù) 化 類 型 可 以 引 用 一 個 原 始 類 型 的 對 象 , 編 譯 報 告 警 告 , 例 如 ,Collection c = new Vector();/可 不 可 以 原 始 類 型 可 以 引 用 一 個 參

45、數(shù) 化 類 型 的 對 象 , 編 譯 報 告 警 告 , 例 如 ,Collection c = new Vector();/原 來 的 方 法 接 受 一 個 集 合 參 數(shù) , 新 的 類 型 也 要 能 傳 進 去 l 參 數(shù) 化 類 型 不 考 慮 類 型 參 數(shù) 的 繼 承 關(guān) 系 : Vector v = new Vector(); /錯 誤 !/不 寫 沒 錯 , 寫 了 就 是 明 知 故 犯 Vector v = new Vector(); /也 錯 誤 !l 編 譯 器 不 允 許 創(chuàng) 建 類 型 變 量 的 數(shù) 組 。 即 在 創(chuàng) 建 數(shù) 組 實 例 時 , 數(shù) 組 的

46、 元 素 不能 使 用 參 數(shù) 化 的 類 型 , 例 如 , 下 面 語 句 有 錯 誤 : Vector vectorList = new Vector10;l 思 考 題 : 下 面 的 代 碼 會 報 錯 誤 嗎 ?Vector v1 = new Vector(); Vector v = v1; 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 泛 型 中 的 ? 通 配 符l 問 題 : 定 義 一 個 方 法 , 該 方 法 用 于 打 印 出 任 意 參 數(shù) 化 類 型 的 集 合 中 的 所 有 數(shù) 據(jù) , 該 方 法 如 何 定 義 呢 ?l

47、 錯 誤 方 式 :public static void printCollection(Collection cols) for(Object obj:cols) System.out.println(obj);/* cols.add(string);/沒 錯 cols = new HashSet();/會 報 告 錯 誤 ! */l 正 確 方 式 :public static void printCollection(Collection cols) for(Object obj:cols) System.out.println(obj);/cols.add(string);/錯 誤 ,

48、 因 為 它 不 知 自 己 未 來 匹 配 就 一 定 是 Stringcols.size();/沒 錯 , 此 方 法 與 類 型 參 數(shù) 沒 有 關(guān) 系 cols = new HashSet();l 總 結(jié) : 使 用 ?通 配 符 可 以 引 用 其 他 各 種 參 數(shù) 化 的 類 型 , ?通 配 符 定 義 的 變 量 主 要 用 作 引 用 , 可 以 調(diào) 用 與 參 數(shù) 化 無關(guān) 的 方 法 , 不 能 調(diào) 用 與 參 數(shù) 化 有 關(guān) 的 方 法 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 泛 型 中 的 ? 通 配 符 的 擴 展l

49、 限 定 通 配 符 的 上 邊 界 : 正 確 : Vector x = new Vector();/?號 指 定 的 類 為 Number的子 類 錯 誤 : Vector x = new Vector();在 應(yīng) 用 泛 型 時 可 以 使 用 extends限 定 符 , 并 且 可 以 用 /?號 指 定 的 類 為 Integer的 父 類 錯 誤 : Vector x = new Vector();l 提 示 : 限 定 通 配 符 總 是 包 括 自 己 。 ?只 能 用 作 引 用 , 不 能 用 它 去 給 其 他 變 量 賦 值Vector = new Vector();

50、Vector x = y;上 面 的 代 碼 錯 誤 , 原 理 與 Vector x11 = new Vector();相 似 ,只 能 通 過 強 制 類 型 轉(zhuǎn) 換 方 式 來 賦 值 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 泛 型 集 合 類 的 綜 合 案 例l 能 寫 出 下 面 的 代 碼 即 代 表 掌 握 了 Java的 泛 型 集 合 類 : HashMap hm = new HashMap(); hm.put(zxx,19); hm.put(lis,18); SetMap.Entry mes= hm.entrySet();

51、for(Map.Entry me : mes) System.out.println(me.getKey() + : + me.getValue(); l 對 在 jsp頁 面 中 也 經(jīng) 常 要 對 Set或 Map集 合 進 行 迭 代 :$entry.key:$entry.value 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 通 過 反 射 獲 得 泛 型 的 參 數(shù) 化 類 型l 示 例 代 碼 :Class GenericalReflection private Vector dates = new Vector(); public void

52、 setDates(Vector dates) this.dates = dates; public static void main(String args) Method methodApply = GenericalReflection.class.getDeclaredMethod(applyGeneric, Vector.class); ParameterizedType pType = (ParameterizedType) (methodApply .getGenericParameterTypes()0; System.out.println(setDates( + (Clas

53、s) pType.getRawType().getName() + ) ); l 泛 型 DAO的 應(yīng) 用 : public abstract class DaoBaseImpl implements DaoBase protected Class clazz;public DaoBaseImpl() Type type = this.getClass().getGenericSuperclass();ParameterizedType pt = (ParameterizedType) type;this.clazz = (Class) pt.getActualTypeArguments()0

54、;System.out.println(clazz = + this.clazz); public class ArticleDaoImpl extends DaoBaseImpl implements ArticleDao 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 類 加 載 器與 普 通 程 序 不 同 的 是 , Java程 序 ( class文 件 ) 并 不 是 本 地 的 可 執(zhí) 行程 序 。 當(dāng) 運 行 Java程 序 時 , 首 先 運 行 JVM( Java虛 擬 機 ) , 然 后再 把 Java class加 載 到 JVM里 頭

55、 運 行 , 負 責(zé) 加 載 Java class的 這部 分 就 叫 做 Class Loader。 中 文 叫 做 類 加 載 器 。l Java虛 擬 機 中 可 以 安 裝 多 個 類 加 載 器 , 系 統(tǒng) 默 認 三 個 主 要 類 加 載器 , 每 個 類 負 責(zé) 加 載 特 定 位 置 的 類 :BootStrap,ExtClassLoader,AppClassLoaderl 類 加 載 器 也 是 Java類 , 因 為 其 他 是 java類 的 類 加 載 器 本 身 也 要 被類 加 載 器 加 載 , 顯 然 必 須 有 第 一 個 類 加 載 器 不 是 不 是 j

56、ava類 , 這正 是 BootStrap。 l Java虛 擬 機 中 的 所 有 類 裝 載 器 采 用 具 有 父 子 關(guān) 系 的 樹 形 結(jié) 構(gòu) 進 行組 織 , 在 實 例 化 每 個 類 裝 載 器 對 象 時 , 需 要 為 其 指 定 一 個 父 級 類裝 載 器 對 象 或 者 默 認 采 用 系 統(tǒng) 類 裝 載 器 為 其 父 級 類 加 載 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 類 裝 載 器一 般 類 加 載 器 的 加 載 過 程 如 下 : l調(diào) 用 findLoadedClass() 來 查 看 是 否 存 在 已

57、 裝 入 的 類 。 2如 果 沒 有 , 那 么 獲 取 class文 件 的 原 始 字 節(jié) 。 ( 通 過 IO從 文 件 系 統(tǒng) , 來 自網(wǎng) 絡(luò) 的 字 節(jié) 流 等 ) l如 果 已 有 原 始 字 節(jié) , 調(diào) 用 defineClass() 將 它 們 轉(zhuǎn) 換 成 Class 對 象 。 l如 果 沒 有 原 始 字 節(jié) , 然 后 調(diào) 用 findSystemClass() 查 看 是 否 從 本 地 文 件 系統(tǒng) 獲 取 類l如 果 resolve 參 數(shù) 是 true, 那 么 調(diào) 用 resolveClass() 解 析 Class 對 象 。 l如 果 還 沒 有 類 ,

58、 返 回 ClassNotFoundException。 l否 則 , 將 類 返 回 給 調(diào) 用 程 序 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 類 加 載 器 之 間 的 父 子 關(guān) 系 和 管 轄 范 圍 圖BootStrapExtClassLoaderAppClassLoaderItcastClassLoaderMyClassLoaderSystemclassLoader JRE/lib/rt.jarJRE/lib/ext/*.jarCLASSPATH指 定 的所 有 jar或 目 錄傳 智 播 客 指 定 的特 殊 目 錄 高 級 軟

59、件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 類 加 載 器 的 委 托 機 制l 當(dāng) Java虛 擬 機 要 加 載 一 個 類 時 , 到 底 派 出 哪 個 類 加 載 器 去 加 載 呢 ?首 先 當(dāng) 前 線 程 的 類 加 載 器 去 加 載 線 程 中 的 第 一 個 類 。如 果 類 A中 引 用 了 類 B, Java虛 擬 機 將 使 用 加 載 類 A的 類 裝 載 器 來 加 載 類B。 還 可 以 直 接 調(diào) 用 ClassLoader.loadClass()方 法 來 指 定 某 個 類 加 載 器 去 加載 某 個 類 。l 每 個 類 加

60、 載 器 加 載 類 時 , 又 先 委 托 給 其 上 級 類 加 載 器 。當(dāng) 所 有 祖 宗 類 加 載 器 沒 有 加 載 到 類 , 回 到 發(fā) 起 者 類 加 載 器 , 還 加 載 不 了 ,則 拋 ClassNotFoundException, 不 是 再 去 找 發(fā) 起 者 類 加 載 器 的 兒 子 , 因為 沒 有 getChild方 法 , 即 使 有 , 那 有 多 個 兒 子 , 找 哪 一 個 呢 ?對 著 類 加 載 器 的 層 次 結(jié) 構(gòu) 圖 和 委 托 加 載 原 理 , 解 釋 先 前 將ClassLoaderTest輸 出 成 jre/lib/ext目 錄 下 的 itcast.jar包 中 后 , 運 行 結(jié) 果 為ExtClassLoader的 原 因 。 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 動 態(tài) 代 理 的 工 作 原 理 圖 高 級 軟 件 人 才 實 作 培 訓(xùn) 專 家 ! 北 京 傳 智 播 客 教 育 結(jié) 束 語 熱 烈 歡 迎 各 軟 件 公 司 到 傳 智播 客 公 司 預(yù) 定 和 招 聘 軟 件 開 發(fā)人 才 ! 謝 謝 !

展開閱讀全文
溫馨提示:
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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!