java 反射getClass .class 的使用方法示例
本文實(shí)例講述了java 反射getClass .class 的使用方法。分享給大家供大家參考,具體如下:
java反射機(jī)制
怎么從一個(gè)實(shí)例上的獲得類反射
/**
* obj 實(shí)例的對象
* getClass() 獲得該實(shí)例類的反射
* @return
* Class<? extends Object>
*/
obj.getClass();
//例子
String str1 = "123";
Class<?> strClass1 = str1.getClass();
String str2 = new String("456");
Class<?> strClass2 = str2.getClass();
怎么從一個(gè)類上獲得類的反射
/** * ClassName 類名稱 * .class 該類的屬性 * @return * Class<? extends Object> */ ClassName.class //例子 Class<?> a = String.class Class<?> b = Integer.class Class<?> c = Double.class
package Main;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;
import Demo.Demo1;
public class Index
{
public static void main(String[] agrs) throws Exception
{
Demo1 obj = new Demo1();
String str = (String)runTargetMethod(obj,"test1",new Class[]{String.class,String.class},new Object[]{"2","3"});
System.out.println(str);
System.out.println();
System.out.println();
System.out.println();
dumpTargetMethod(obj);
}
/**
* 調(diào)用指定對象的指定方法。
* @param Object obj 對象實(shí)例
* @param String methodName 要調(diào)用的方法名稱
* @param Class<?>[] classes 方法中的參數(shù)對象
* @param Object[] valObj 需要向參數(shù)中傳遞的值
* @return Object 直接結(jié)果
* */
public static Object runTargetMethod(Object obj,String methodName,Class<?>[] classes,Object[] valObj) throws Exception
{
Class<?> classObj = obj.getClass();
Method method = classObj.getMethod(methodName,classes);
return method.invoke(obj, valObj);
}
/**
* 打印對象內(nèi)容
* @param Object obj 對象實(shí)例
* @throws IllegalAccessException
* @throws IllegalArgumentException
* */
public static void dumpTargetMethod(Object obj) throws IllegalArgumentException, IllegalAccessException
{
Class<?> classObj = obj.getClass();
System.out.println("-------------------method dump-------------------------");
Method[] methods = classObj.getDeclaredMethods();
for(Method method : methods)
{
Class<?>[] parameters = method.getParameterTypes();
StringBuffer strBuffer = new StringBuffer();
for(int i=0;i<parameters.length;i++)
{
if(i < (parameters.length - 1))
strBuffer.append(parameters[i].getName() + ",");
else
strBuffer.append(parameters[i].getName());
}
if(!strBuffer.toString().isEmpty())
{
System.out.println("method info (method modifier : " + Modifier.toString(method.getModifiers()) + " method return type : " + method.getReturnType().getName() + " method name : " + method.getName() + " parameters : " + strBuffer.toString() + ")");
}else{
System.out.println("method info (method modifier : " + Modifier.toString(method.getModifiers()) + " method return type : " + method.getReturnType().getName() + " method name : " + method.getName() + " parameters : null)");
}
}
System.out.println("-------------------method dump-------------------------");
System.out.println("-------------------------------------------------------");
System.out.println("-------------------fields dump-------------------------");
Field[] fields = classObj.getDeclaredFields();
for(Field field : fields)
{
//能夠訪問該字段
field.setAccessible(true);
System.out.println("field info (modifier : " + Modifier.toString(field.getModifiers()) + " type : " + field.getType().getName() + " " + " name : " + field.getName() + " defaultValue : " + field.get(obj).toString() + ")");
}
}
}
package Demo;
/**
* Demo 測試類
*/
public class Demo1
{
public String demo1 = "demo1_val";
protected String demo2 = "demo2_val";
private String demo3 = "demo3_val";
public static String demo4 = "demo4_val";
public String getName()
{
return "my name is 勇哥";
}
public int getAge()
{
return 22;
}
public String test1(String str1,String str2)
{
StringBuffer buffer = new StringBuffer(str1);
buffer.append(str2);
return buffer.toString();
}
public String test1()
{
return "123";
}
}
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Spring注解@RestControllerAdvice原理解析
這篇文章主要介紹了Spring注解@RestControllerAdvice原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Spring聲明式事務(wù)@Transactional注解實(shí)現(xiàn)元數(shù)據(jù)驅(qū)動的事務(wù)管理
這篇文章主要為大家介紹了Spring聲明式事務(wù)@Transactional注解實(shí)現(xiàn)元數(shù)據(jù)驅(qū)動的事務(wù)管理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Java中字符串與日期轉(zhuǎn)換常見方法總結(jié)
這篇文章主要給大家介紹了關(guān)于Java中字符串與日期轉(zhuǎn)換常見方法的相關(guān)資料,在Java編程中經(jīng)常需要將字符串表示的日期轉(zhuǎn)換為日期對象進(jìn)行處理,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
Java反射機(jī)制,反射相關(guān)API,反射API使用方式(反射獲取實(shí)體類字段名和注解值)
這篇文章主要介紹了Java反射機(jī)制,反射相關(guān)API,反射API使用方式(反射獲取實(shí)體類字段名和注解值),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Java使用OpenFeign管理多個(gè)第三方服務(wù)調(diào)用
最近開發(fā)了一個(gè)統(tǒng)一調(diào)度類的項(xiàng)目,需要依賴多個(gè)第三方服務(wù),這些服務(wù)都提供了HTTP接口供我調(diào)用。感興趣的可以了解一下2021-06-06
Java編程實(shí)現(xiàn)遍歷兩個(gè)MAC地址之間所有MAC的方法
這篇文章主要介紹了Java編程實(shí)現(xiàn)遍歷兩個(gè)MAC地址之間所有MAC的方法,涉及Java針對MAC的遍歷獲取與字符串轉(zhuǎn)換相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11

