反射機制的原理及在Android下的簡單應用 – Android移動開發技術文章_手機開發 Android移動開發教學課程

花瞭幾天時間,研究瞭一下Java的反射機制。在這裡總結一下這幾天學習的成果,一來分享自己的學習過程和在學習中遇到的問題,二來是給像我一樣不太瞭解Java反射機制的同學做一個簡單的介紹。在文章後面會鏈接一個Android反射機制的應用程序。



一、反射的概念及在Java中的類反射


  反射主要是指程序可以訪問、檢測和修改它本身狀態或行為的一種能力。在計算機科學領域,反射是一類應用,它們能夠自描述和自控制。這類應用通過某種機制來實現對自己行為的描述和檢測,並能根據自身行為的狀態和結果,調整或修改應用所描述行為的狀態和相關的語義。


   在Java中的反射機制,被稱為Reflection。(大傢看到這個單詞,第一個想法應該就是去開發文檔中搜一下瞭。)它允許運行中的Java程序對自身進行檢查,並能直接操作程序的內部屬性或方法。Reflection機制允許程序在正在執行的過程中,利用Reflection APIs取得任何已知名稱的類的內部信息,包括:package、 type parameters、 superclass、 implemented interfaces、


 inner classes、 outer classes、 fields、 constructors、 methods、 modifiers等,並可以在執行的過程中,動態生成Instances、變更fields內容或喚起methods。


  好,瞭解這些,那我們就知道瞭,我們可以利用反射機制在Java程序中,動態的去調用一些protected甚至是private的方法或類,這樣可以很大程度上滿足我們的一些比較特殊需求。你當然會問,反射機制在Android平臺下有何用處呢?


  我們在進行Android程序的開發時,為瞭方便調試程序,並快速定位程序的錯誤點,會從網上下載到對應版本的Android SDK的源碼(這裡給大傢提供一個2.3.3版本的下載鏈接)。你會發現很多類或方法中經常加上瞭“@hide”註釋標記,它的作用是使這個方法或類在生成SDK時不可見,那麼我們的程序可能無法編譯通過,而且在最終發佈的時候,就可能存在一些問題。


  那麼,對於這個問題,第一種方法就是自己去掉Android源碼中的”@hide”標記,然後重新編譯生成一個SDK。另一種方法就是使用Java反射機制瞭,可以利用這種反射機制訪問存在訪問權限的方法或修改其域。


  廢話半天,該入正題瞭,在進入正題之前,先給上一個反射測試類的代碼,該代碼中定義瞭我們需要進行反射的類,該類並沒有實際的用途,僅供做為測試類。提示:本文提供的代碼,並不是Android平臺下的代碼,而是一個普通的Java程序,僅僅是對Java反射機制的Demo程序,所以大傢不要放在Android下編譯啊,否則出現問題,別追究我的責任啦!


ReflectionTest.java
package crazypebble.reflectiontest;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *