java 反射getClass .class 的使用方法示例
本文實(shí)例講述了java 反射getClass .class 的使用方法。分享給大家供大家參考,具體如下:
java反射機(jī)制
怎么從一個實(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();
怎么從一個類上獲得類的反射
/** * 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 Security如何在Servlet中執(zhí)行
這篇文章主要介紹了Spring Security如何在Servlet中執(zhí)行,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04
SpringMVC實(shí)現(xiàn)表單驗(yàn)證功能詳解
這篇文章主要為大家詳細(xì)介紹了SpringMVC 表單驗(yàn)證的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
Spring通過三級緩存解決循環(huán)依賴問題的過程詳解
循環(huán)依賴指的是在對象之間存在相互依賴關(guān)系,形成一個閉環(huán),導(dǎo)致無法準(zhǔn)確地完成對象的創(chuàng)建和初始化,本文主要介紹了Spring通過三級緩存解決循環(huán)依賴的方法,需要的可以參考下2023-10-10
SpringBoot項(xiàng)目打包運(yùn)行jar包的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot項(xiàng)目打包運(yùn)行jar包的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
spring boot配合前端實(shí)現(xiàn)跨域請求訪問
本篇文章主要介紹了spring boot配合前端實(shí)現(xiàn)跨域請求訪問,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04
Java中的ReadWriteLock高效處理并發(fā)讀寫操作實(shí)例探究
這篇文章主要為大家介紹了Java中的ReadWriteLock高效處理并發(fā)讀寫操作實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
SpringCloud Zuul實(shí)現(xiàn)動態(tài)路由
這篇文章主要介紹了SpringCloud Zuul實(shí)現(xiàn)動態(tài)路由,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01
IntelliJ IDEA安裝scala插件并創(chuàng)建scala工程的步驟詳細(xì)教程
這篇文章主要介紹了IntelliJ IDEA安裝scala插件并創(chuàng)建scala工程的步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
Mybatis?XML配置文件實(shí)現(xiàn)增刪改查的示例代碼
本文主要介紹了Mybatis?XML配置文件實(shí)現(xiàn)增刪改查的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-03-03

