① 說說對java反射的理解,使用反射如何獲取一個類的所有方法,使用反射需要注意哪些問題
反射說白了就是可以獲得一個類的所有信息,主要包括方法和屬性兩部分。
1.獲得方法包括獲得方法的名稱,方法的返回類型,方法的訪問修飾符,以及通過反射執行這個方法。
2.獲得屬性包括屬性的名稱,類型,訪問修飾符,以及這個屬性的值。
這些獲得都有相應的API提供操作。
舉個例子:
先定義一個類,有age這個屬性,以及age的get和set方法:
public class TestRflectionFather {
public int age =32;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
然後操作獲得所有方法:
import java.lang.reflect.Method;
public class Testmain {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("TestRflectionFather");
Method[] methods =clazz.getDeclaredMethods();
for(Method me:methods)
{
System.out.println(me.getName());
}
}
}
//最後輸出
getAge
setAge
② java中反射的三種方法是
第一種:通過forName()方法;
第二種:類.class;
第三種:對象.getClass()。
舉例如下:
package
test;
public class Demo{
public static void
main(){
Class<?> c1 = null;
Class<?> c2 =
null;
Class<?> c3 =
null;
//三種反射用實例化方式
try{
//最常用的一種形式
c1 =
Class.forName("test.X");
}catch(ClassNotFoundException
e){
e.printStackTrace();
}
//通過Object類中的方法實例化
c2
= new X().getClass();
//通過類.class實例化
c3 =
X.class;
System.out.println("類名:" + c1.getName());
//得到類名
System.out.println("類名:" + c2.getName());
//得到類名
System.out.println("類名:" + c3.getName());
//得到類名
}
}
③ Java如何獲取方法參數中的名稱
一、從註解中獲取
使用註解方式,我們需要自定義一個註解,在註解中指定參數名,然後通過反射機制,獲取方法參數上的註解,從而獲取到相應的註解信息。這里自定義的註解是Param,通過value參數指定參數名,定義了一個工具類ParameterNameUtils來獲取指定方法的參數名列表,這里獲取測試類ParameterNameTest中定義的方法method1的參數名列表表,下面是具體的代碼。
④ Java反射機制獲取set()方法 並且為set()方法傳值
Class.getDeclaredMethod()
是獲取這個類中所有的方法,返回的是Method[]
如果有參數,第1個是方法名稱,第2個是該方法的所有參數數組,這樣返回的是Method這個對象
Method.invoke()
傳入調用方法的類,另一個是調用這個方法所需要的參數,如果該方法沒有參數,可以不填寫,在JDK1,4之前,第2個參數是傳入一個數組的,但是在jdk1.5之後,可以不傳數組,多個參數用逗號隔開
不知道你聽明白沒
⑤ 在JAVA中,怎麼利用反射獲取一個方法
java的反射用法:(異常請自行處理)
①找到類:Class cl = Class.forName("java.util.Date");
②創建對象(要求這個類中含有空參數的構造方法):Object obj = cl.newInstence();
③根據名稱和參數找方法:Method method1 = cl.getMethod("getTime");//如果沒有參數不用寫第二個參數如果有參數的如:Method method2 = cl.getMethod("setTime",long.class);
④在某個對象上面執行方法,Object result = method1.invoke(obj);//如果有參數的Object result = method2.invoke(obj,21317362721);
執行的方如果有返回值,將返回值返回,否則返回null
⑥ 如何利用java反射順序的從一個java類中得到其中定義的成員變數名或者方法
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
System.out.println("name====="+fieldName);
String firstLetter = fieldName.substring(0, 1).toUpperCase();
// 獲得和屬性對應的getXXX()方法的名字
String getMethodName = "get" + firstLetter + fieldName.substring(1);
// 獲得和屬性對應的getXXX()方法
Method getMethod = classType.getMethod(getMethodName, new Class[]{});
// 調用原對象的getXXX()方法
Object value = getMethod.invoke(object, new Object[]{});
System.out.println("value===="+value);
}
⑦ java反射獲取方法不定參數的名稱和類型
(Object...objects){
for(Objectobj:objects){
Classclz=obj.getClass();
System.out.println(clz);
}
returnfalse;
}