1. 程式人生 > 其它 >Docker部署Hadoop+Hive

Docker部署Hadoop+Hive

Java反射

1. 定義

Java放射機制是在執行狀態中,對於任意一個類,都能知道這個類的所有屬性和方法;對於任意一個物件,都能呼叫它的任意方法和屬性。

2. 反射機制的相關類

與Java反射相關的類如下:

類名 用途
Class類 代表類的實體,在執行的Java應用程式中表示類和介面
Field類 代表類的成員變數(成員變數也稱為類的屬性)
Method類 代表類的方法
Constructor類 代表類的構造方法

2.1 Class類

Class代表類的例項,在執行的Java應用程式中表示類和介面。在這個類中提供了很多有用的方法:

  • 獲得類相關的方法
方法 用途
asSubclass(Class clazz) 把傳遞的類的物件轉換成代表子類的物件
Cast 把物件轉換成代表類或是介面的物件
getClassLoader() 獲得類的載入器
getClasses() 返回一個數組,陣列中包含該類中所有公共類和介面類的物件
GetDeclaredClasses() 返回一個數組,陣列中包含該類中所有類和介面類的物件
forName(String className) 根據類名返回類的物件
getName() 獲得類的完整路勁名字
newInstance() 建立類的例項
getPackage() 獲得類的包
getSimpleName() 獲得類的名字
getSuperclass() 獲得當前類繼承的父類的名字
getInterfaces() 獲得當前類實現的類或是介面
  • 獲得類中屬性相關的方法
方法 用途
getField(String name) 獲得某個公有的屬性物件
getFields() 獲得所有公有的屬性物件
getDeclaredField(String name) 獲得某個屬性物件
getDeclaredField() 獲得所有屬性物件
  • 獲得類中註解相關的方法
  • 獲得類中構造器相關的方法
方法 用途
getConstructor(Class...<?> parameterTypes) 獲得該類中與引數型別匹配的公有構造方法
getConstructors() 獲得該類的所有公有構造方法
getDeclaredConstructor(Class...<?> parameterTypes) 獲得該類中與引數型別匹配的構造方法
getDeclaredConstructors() 獲得該類所有構造方法
  • 獲得類中方法相關的方法
方法 用途
getMethod(String name, Class...<?> parameterTypes) 獲得該類某個公有的方法
getMethods() 獲得該類所有公有的方法
getDeclaredMethod(String name, Class...<?> parameterTypes) 獲得該類某個方法
getDeclaredMethods() 獲得該類所有方法
  • 類中其他重要的方法

2.2 Field類

Field代表類的成員變數(成員變數也稱為類的屬性)

方法 用途
equals(Object obj) 屬性與obj相等則返回true
get(Object obj) 獲得obj中對應的屬性值
set(Object obj, Object value) 設定obj中對應屬性值

2.3 Method類

method代表類的方法

方法 用途
invoke(Object obj, Object... args) 傳遞object物件及引數呼叫該方法對應的方法

2.4 Constructor類

Constructor代表類的構造方法

方法 用途
newInstance(Object... initargs) 根據代替的引數建立類的物件

2.4 四個類的關係

  1. 位元組碼中有多個欄位、方法、構造器,是用陣列儲存的。
  2. 數組裡的每一個元素,都是對應的物件。
  3. Field、Method、Constructor物件內部有對欄位、方法、構造器更詳細的描述。

3. 反射的使用

3.1 建立Class物件

  1. 建立Class物件的方式一:(物件.getClass()),獲取類中的位元組碼檔案。
Class clazz = p1.getClass()
  1. 建立Class物件的方式二:(類.class),需要輸入一個明確的類,任意一個類都有一個靜態的class屬性。
Class clazz = Person.class;
  1. 建立Class物件的方式三:(forName("String className"))。
Clazz = Class.forName("Person");

3.2 根據反射建立物件例項

  1. 通過類物件的newInstance方法。
Object o1 = p1.newInstance();
  1. 通過構造器的newInstance方法。

3.3 根據反射呼叫方法

invoke(Object obj, Object... args)