?# 第四章第一節--反射訪問數據
標簽(空格分隔): 廖雪峰
---
## field
通過Class實例獲取field信息:
- getField(name):獲取某個public的field(包括父類).
- getDeclaredField(name):獲取當前類的某個field(不限定public不包括父類).
- getFields():所以public的field(包含父類).
- getDeclaredFields(name):獲取當前類的所有field(不限定public不包含父類).
一個Field對象包含一個field的所有信息:
- getName():獲得名稱.
- getType():屬性定一個類型.
- getModifiers():獲得屬性定義的修飾符(public/private/等).

通過Field對象或得field的值:
- 獲取field的值
通過get(Object獲取一個實例的該字段.制作演示,Integer中的value是private,無法直接獲取.)

- 設置field的值.
通過set(Object,Object)設置一個實例中該字段的值.

注意:
1. 當field的限制符為private的時候,不能通過field.get(Object)和field.set(Object,Object)來操作這個字符,這是需要在前面加上field.setAccessible(true)來強制訪問.
2. 操作非靜態字段的時候通過field.get(Object)獲取,而靜態字段不需要實例化對象所以采用field.get(null)即可.field.set(Object,Object)也變為field.set(null,Object).
3. setAccessible(true)可能會失敗,應為java定義了SecurityManager,SecurityManager的規則可以阻止對該Field設置accessible,例如該規則應用于所有java和javax開頭的package(java核心類).
## 小節小結.
- Field對象封裝了字段的所有信息.
- 通過Class實例方法可以獲得Field實例:getField/getFields/getDeclaredField/getDeclaredFields.
- 通過Field實例可以獲取字段的信息:getName/getType/getModifiers
- 通過Field實例可以讀取或者設置某個對象的字段:get(Object instance)/set(Object instance,Object fieldValue)
- 通過設置setAccessible(true)來訪問非public字段(除了java核心類).
- 前言
- 一:Java快速入門
- 二:Java面向對象編程
- 三:Java異常處理
- 錯誤處理
- Java的異常
- 捕獲異常
- 拋出異常
- 自定義異常
- 斷言和日志
- 使用斷言
- 使用JDK Logging
- 使用Commons Logging
- 使用Log4j
- 四:Java反射與泛型
- 反射
- Class類
- 訪問字段
- 調用方法
- 調用構造方法
- 獲取繼承關系
- 注解
- 使用注解
- 定義注解
- 處理注解
- 泛型
- 什么是泛型
- 使用泛型
- 編寫泛型
- 擦拭法
- extends通配符
- super通配符
- 泛型和反射
- 五:Java集合
- Java集合簡介
- Java集合簡介
- List
- 使用List
- 編寫equals方法
- Map
- Set
- Queue
- Stack
- 最佳實踐
- 六:Java IO編程
- 七:Java處理日期和時間
- 八:JUnit單元測試
- 九:Java正則表達式
- 十:Java加密與安全
- 十一:Java多線程編程
- 十二:Maven基礎
- 十三:Java網絡編程
- 十四:Java操作XML和JSON
- 十五:Java JDBC編程
- 十六:Java函數式編程