二。成员变量的反射Field:
) ^1 S O) \0 A* P class Point p {int x=3;int y =4;}
" A3 X' H- L4 W0 r' J( [2 J* s& q9 U Field fieldx = p.getClass()。getField("x");4 S1 M& p/ M9 M) R& S+ T1 X* l, X
System.out.println(fieldx.get(p)); 即可得到p中x的值。
# C5 E2 P! p3 v/ s; T i$ Z 三。成员方法的反射:
( f" h- a& m/ k% `$ {2 ] 必须导入java.lang.reflect.*;包治好才能使用7 e% d( S* r8 V+ t& B7 \
String str = "dafsf"
' i! @; r5 C) o$ m0 _8 \1 t- f Method methodCharAt = String.class.getMethod("charAt",int.class);( |* P: A, W/ U; f |7 W
System.out.println(methodCharAt.invoke(str,1));# G) |+ a$ H0 @2 l
方法的反射是最能 体现反射的意思的,即以方法为中心,原来作用的类和参数都作为该方法的参数。) d& h& d/ a6 |( r u# j
四。main方法的反射:- H+ i" G8 p& j% }! x- M
package com.baidu.exam;5 K" Z! B8 ?3 Y# e
import java.lang.reflect.Method;6 O: F8 |; I6 m# c+ Q
class Point {
: F& t+ B2 I, A0 S3 _ public static void main(String[]args)throws Exception4 d" r" r8 q# Q) ?3 f9 M
{5 U; P( k4 H0 p4 I! L( s) s% z
String name = args[0];
$ [* [0 g5 ^1 ]" i4 h9 G Method mainMethod = Class.forName(name)。getMethod("main", String[].class);# J5 c3 ?' { u9 K. B( M
mainMethod.invoke(null, (Object)new String[]{"eAWDR","rgsfe","gs"}); //此时强制转换特别重要
7 n9 w E4 N" Y' ^& d% F }1 O+ p+ x' T3 `
}3 q5 Z: j" S" H8 H6 h) w
class Hello% o, S* K, l4 w% Y* W' v. _3 |
{
1 ]9 ^7 [0 N+ k public static void main(String[]args) {
- }3 y2 i' `; k; p for(String str:args){
9 {' p$ ?0 ]3 P/ W System.out.println(str);
( q c, S4 v8 r9 s+ `0 D9 q* e6 N }
& B8 l$ o4 u! C& S' h6 G }
" K8 e! D; H, Q9 W$ c }
, d$ T: F: D: h1 a8 u 将main方法发射的实例。, D4 q _2 i6 M
五。数组的反射:
5 q; O F$ M6 V) I+ }' T' V4 z 有一个关于数组反射的工具类Array,在java.lang.reflect包中,, l5 k# `: K- x% b
关键方法:Array.get(Object [] obj ,int i)得到obj数组中第i个元素i的值 |