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三個構造函數(shù)的參數(shù)
????????????????parameters?
=
?constructors[i].getParameterTypes();

????????????????
for
?(
int
?j?
=
?
0
;?j?
<
?parameters.length;?j
++
)?
{
????????????????????
//
得到參數(shù)名
????????????????????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();
????????}
????}
}
主要經(jīng)驗值獲得:
1.java.lang.reflect.Constructor 作用
2.如何獲得一個類構造函數(shù)的參數(shù)
次要經(jīng)驗值獲得:
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?對象的一個數(shù)組,這些對象反映此?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?+?"]");
????}
}主要經(jīng)驗值獲得:
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()?
{}
}

主要經(jīng)驗值獲得:
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?參數(shù)是一個?String,用于指定所需方法的簡稱。parameterTypes
?????????????*?參數(shù)是按聲明順序標識該方法形式參數(shù)類型的?Class?對象的一個數(shù)組。如果?parameterTypes?為
?????????????*?null,則按空數(shù)組處理。
?????????????*/
????????????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[]?-?用于方法調用的參數(shù)
?????????????*/
????????????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);
????}
}

主要經(jīng)驗值獲得:
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>?
{
}

主要經(jīng)驗值獲得:
1.如何得到泛型以及其ActualTypeArguments
---------------------------------------------------------------------------------------------
6.