java 反射getClass .class 的使用方法示例
本文實(shí)例講述了java 反射getClass .class 的使用方法。分享給大家供大家參考,具體如下:
java反射機(jī)制
怎么從一個(gè)實(shí)例上的獲得類反射
/** * obj 實(shí)例的對(duì)象 * 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)用指定對(duì)象的指定方法。 * @param Object obj 對(duì)象實(shí)例 * @param String methodName 要調(diào)用的方法名稱 * @param Class<?>[] classes 方法中的參數(shù)對(duì)象 * @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); } /** * 打印對(duì)象內(nèi)容 * @param Object obj 對(duì)象實(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 測(cè)試類 */ 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緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
Spring注解@RestControllerAdvice原理解析
這篇文章主要介紹了Spring注解@RestControllerAdvice原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Spring聲明式事務(wù)@Transactional注解實(shí)現(xiàn)元數(shù)據(jù)驅(qū)動(dòng)的事務(wù)管理
這篇文章主要為大家介紹了Spring聲明式事務(wù)@Transactional注解實(shí)現(xiàn)元數(shù)據(jù)驅(qū)動(dòng)的事務(wù)管理示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Java中字符串與日期轉(zhuǎn)換常見方法總結(jié)
這篇文章主要給大家介紹了關(guān)于Java中字符串與日期轉(zhuǎn)換常見方法的相關(guān)資料,在Java編程中經(jīng)常需要將字符串表示的日期轉(zhuǎn)換為日期對(duì)象進(jìn)行處理,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11Java反射機(jī)制,反射相關(guān)API,反射API使用方式(反射獲取實(shí)體類字段名和注解值)
這篇文章主要介紹了Java反射機(jī)制,反射相關(guān)API,反射API使用方式(反射獲取實(shí)體類字段名和注解值),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07Java使用OpenFeign管理多個(gè)第三方服務(wù)調(diào)用
最近開發(fā)了一個(gè)統(tǒng)一調(diào)度類的項(xiàng)目,需要依賴多個(gè)第三方服務(wù),這些服務(wù)都提供了HTTP接口供我調(diào)用。感興趣的可以了解一下2021-06-06Java編程實(shí)現(xiàn)遍歷兩個(gè)MAC地址之間所有MAC的方法
這篇文章主要介紹了Java編程實(shí)現(xiàn)遍歷兩個(gè)MAC地址之間所有MAC的方法,涉及Java針對(duì)MAC的遍歷獲取與字符串轉(zhuǎn)換相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11