唉!我還真是在面試中學(xué)習(xí)新東東啊,一個公司剛剛給了個測試,不過我很奇怪的是為什么web developer的職位居然考java的反射機(jī)制題,不過學(xué)習(xí)研究一下反射機(jī)制對我來說是件好事啦!
先說說什么是java反射機(jī)制吧,在運(yùn)行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法;這 種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機(jī)制。主要功能:在運(yùn)行時判斷任意一個對象所屬的類;在運(yùn)行時構(gòu)造任意一個類的對 象;在運(yùn)行時判斷任意一個類所具有的成員變量和方法;在運(yùn)行時調(diào)用任意一個對象的方法;生成動態(tài)代理。
然后再留個示例吧。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package com.beidou.test; import java.lang.reflect.Method; public class Dynamic { public static void main(String[] args) throws Exception{ Class c = Dynamic. class ; //得到對象 Method[] methods = c.getDeclaredMethods(); //得到方法 for (Method method : methods){ System.out.print(method.getName()); //打印參數(shù)名 Class[] parameterTypes = method.getParameterTypes(); for ( int i= 0 ;i<parameterTypes.length;i++){ String nameString=parameterTypes[i].getName(); System.out.print( "parameterType:" +nameString); //打印方法參數(shù)類型 } System.out.print( "ReturnType:" +method.getReturnType()); System.out.println(); } Object obj=c.newInstance(); //獲取到方法對象,假設(shè)方法的參數(shù)是一個int,String,method名為getAge Method sAge = c.getMethod( "getAge" , new Class[] { int . class ,String. class }); //獲得參數(shù)Object Object[] arguments = new Object[]{ new Integer( 23 ), new String( "abc" )}; //執(zhí)行方法 String s=(String)sAge.invoke(obj , arguments); System.out.print(s); } public String getAge( int age,String name){ return name+ ": " +age; } } |
以上這篇Java的反射機(jī)制---動態(tài)調(diào)用對象的簡單方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持服務(wù)器之家。