1. Constructor
/**/
/*
介绍:
Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。

输出:
java.util.ArrayList: Collection
java.util.ArrayList: int
java.util.ArrayList:
*/
package
api.java.lang.reflect;

import
java.lang.reflect.Constructor;


public
class
Class_Constructor
{


public
static
void
main(String[] args)
{

try
{
Class c
=
Class.forName(
"
java.util.ArrayList
"
);

Constructor constructors[]
=
c.getConstructors();

for
(
int
i
=
0
; i
<
constructors.length; i
++
)
{
System.out.print(constructors[i].getName()
+
"
:
"
);
Class parameters[];
//
分别得到ArrayList三个构造函数的参数
parameters
=
constructors[i].getParameterTypes();

for
(
int
j
=
0
; j
<
parameters.length; j
++
)
{
//
得到参数名
String s
=
parameters[j].getName();
s
=
s.substring(s.lastIndexOf(
"
.
"
)
+
1
, s.length());
System.out.print(s
+
"
"
);
}
System.out.println(
""
);
}
}
catch
(Exception ex)
{
ex.printStackTrace();
}
}
}
主要经验值获得:
1.java.lang.reflect.Constructor 作用
2.如何获得一个类构造函数的参数
次要经验值获得:
1.s
= s.substring(s.lastIndexOf(".") + 1, s.length()); 得到指定符号后的字符串
----------------------------------------------------------------------------------------------
2. Skill_HiddenFieldModification

/**//*
输出:
Before: [a=21.25, b=54.5, c=5665, d=2043, e=3121, f=1019]
After: [a=21.25, b=54.5, c=0, d=0, e=0, f=0]
*/
package api.java.lang.reflect;

import java.lang.reflect.Field;


public class Skill_HiddenFieldModification
{

// 把所有int置为0

public static void initIntFields(final Object obj)
{

try
{

/**//*
* getDeclaredFields() 返回 Field 对象的一个数组,这些对象反映此 Class
* 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。
*/
Field[] fields = obj.getClass().getDeclaredFields();

for (int idx = 0; idx < fields.length; idx++)
{
//如果是int

if (fields[idx].getType() == int.class)
{

/**//* setAccessible(boolean)
* 将此对象的 accessible 标志设置为指示的布尔值。值为 true 则指示反射的对象在使用时应该取消
* Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。
*/
fields[idx].setAccessible(true);
fields[idx].setInt(obj, 0);
}
}

} catch (final IllegalAccessException ex)
{
throw new RuntimeException(ex);
}
}


public static final void main(final String[] args)
{
SomeNumbers value = new SomeNumbers();
System.out.println("Before: " + value);
initIntFields(value);
System.out.println("After: " + value);
}
}


class SomeNumbers
{

public double a = 21.25d;

public float b = 54.5f;

public int c = 5665;

public int d = 2043;

protected int e = 3121;

private int f = 1019;


public String toString()
{
return new String("[a=" + a + ", b=" + b + ", c=" + c + ", d=" + d
+ ", e=" + e + ", f=" + f + "]");
}
}主要经验值获得:
1.java.lang.reflect.Field 作用
2.基本类型过滤的方法
---------------------------------------------------------------------------------------------
3. Class_MethodgetModifiers

/**//*
输出:
Public Methods:
a1
a2
*/
package api.java.lang.reflect;

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;


public class Class_MethodgetModifiers
{


public static void main(String[] args)
{

try
{
MyClass a = new MyClass();
Class c = a.getClass();
System.out.println("Public Methods:");
//得到所有类的方法
Method methods[] = c.getDeclaredMethods();

for (int i = 0; i < methods.length; i++)
{
//得到方法的修饰符
int modifiers = methods[i].getModifiers();

if (Modifier.isPublic(modifiers))
{
System.out.println(" " + methods[i].getName());
}
}

} catch (Exception e)
{
System.out.println("Exception: " + e);
}

}
}


class MyClass
{

public void a1()
{}

public void a2()
{}

protected void a3()
{}

private void a4()
{}
}

主要经验值获得:
1.java.lang.reflect.Method 作用
2.java.lang.reflect.Modifier 作用
---------------------------------------------------------------------------------------------
4. Method_Invoke

/**//*
输出:
public void api.java.lang.reflect.MyClass2.print(java.lang.String,int)
inovke succeed:haha10
*/
package api.java.lang.reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


public class Method_Invoke
{


public static void main(String[] args)
{

try
{
MyClass2 myclass = new MyClass2();
Class c = myclass.getClass();

Class[] cc = new Class[2];
cc[0] = String.class;
cc[1] = Integer.TYPE;


/**//*
* getMethod(String,Class[] 返回一个 Method 对象,它反映此 Class
* 对象所表示的类或接口的指定公共成员方法。name 参数是一个 String,用于指定所需方法的简称。parameterTypes
* 参数是按声明顺序标识该方法形式参数类型的 Class 对象的一个数组。如果 parameterTypes 为
* null,则按空数组处理。
*/
Method m = c.getMethod("print", cc);
System.out.println(m);

Object arglist[] = new Object[2];
arglist[0] = new String("haha");
arglist[1] = new Integer(10);

/**//*
* Object invoke(Object, Object[])
* Object - 从中调用基础方法的对象
* Object[] - 用于方法调用的参数
*/
m.invoke(myclass, arglist);

} catch (NoSuchMethodException e2)
{
System.out.println("method doesn't exist");

} catch (IllegalAccessException e3)
{
System.out.println("no permission to invoke that method");

} catch (InvocationTargetException e)
{
System.out
.println("an exception ocurred while invoking that method");
System.out.println("Method threw an: " + e.getTargetException());
}
}
}


class MyClass2
{

public void print(String str, int i)
{
System.out.print("inovke succeed:" + str + i);
}
}

主要经验值获得:
1.java.lang.reflect.Method 的 invoke() 的作用
---------------------------------------------------------------------------------------------
5.Class_ParameterizedType
/**//*
输出:
java.util.ArrayList<java.lang.String>
class java.lang.String
*/
package api.java.lang.reflect;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;


public class Class_ParameterizedType
{


/** *//**
* @param args
*/

public static void main(String[] args)
{
Type type = StringList.class.getGenericSuperclass();
System.out.println(type);
ParameterizedType pt = (ParameterizedType) type;
System.out.println(pt.getActualTypeArguments()[0]);

}
}


class StringList extends ArrayList<String>
{
}

主要经验值获得:
1.如何得到泛型以及其ActualTypeArguments
---------------------------------------------------------------------------------------------
6.