欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文搞懂java反射基本API

 更新時間:2023年11月13日 11:10:55   作者:bug生產(chǎn)者  
這篇文章主要為大家介紹了一文搞懂java反射基本API,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

反射

Java提供反射來在運行時狀態(tài)下動態(tài)的獲取類的屬性、方法等信息,在框架中很多地方都應(yīng)用到了反射

反射的操作 獲取Class對象

獲取Class對象的四種方式

// 第一種
Class<Person> clazz = Person.class;
// 第二種
Person person = new Person();
Class clazz1 =  person.getClass();
// 第三種
String className = "com.zhanghe.study.reflect.Person";
Class clazz2 = Class.forName(className);
// 第四種 使用類加載器
ClassLoader classLoader = TestClass.class.getClassLoader();
Class clazz3 = classLoader.loadClass(className);

獲取構(gòu)造器

Class clazz = TestConstructor.class;
Constructor[] constructors = clazz.getConstructors();
System.out.println("=========clazz.getConstructors()====只能獲取到公有的構(gòu)造器");
for(Constructor constructor : constructors){
  System.out.println(constructor);
}
System.out.println("*****************");

System.out.println("=========clazz.getConstructor()=====獲取公有無參構(gòu)造器");
Constructor constructor = clazz.getConstructor();
System.out.println(constructor);
System.out.println("*****************");

System.out.println("=========clazz.getDeclaredConstructors()=====獲取所有構(gòu)造器(包括私有、受保護、默認、公有)");
Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
for(Constructor declaredConstructor : declaredConstructors){
  System.out.println(declaredConstructor);
}
System.out.println("*****************");

System.out.println("=========clazz.getDeclaredConstructor()====獲取指定參數(shù)類型的構(gòu)造器");
Constructor declaredConstructor = clazz.getDeclaredConstructor(String.class);
System.out.println(declaredConstructor);
System.out.println("*****************");

獲取屬性

System.out.println("======getFields===========");
// 獲取所有的屬性  只能獲取到該類和父類中public的
Field[] fields = clazz.getFields();
for (Field f : fields){
  System.out.println(f.getName());
}
System.out.println("======getDeclaredFields===========");
// 獲取所有的屬性  本類中聲明的所有的屬性都可以獲取到,不可以獲取到父類的
Field[] declaredFields = clazz.getDeclaredFields();
for (Field f : declaredFields){
  // 獲取權(quán)限修飾符
  int i = f.getModifiers();
  String m = Modifier.toString(i);
  System.out.println("Modifier:"+m);
  // 獲取屬性類型
  Class type = f.getType();
  System.out.println("type:"+type.getTypeName());
  // 獲取屬性名
  System.out.println("name:"+f.getName());
}

獲取方法

System.out.println("======getMethods===========");
// 獲取本類和父類中所有的public方法
Method[] methods = clazz.getMethods();
for(Method m : methods){
  System.out.println(m.getName());
}

System.out.println("======getDeclaredMethods===========");
// 獲取本類中所有的方法,包括私有方法  父類的無法獲取
Method[] declaredMethods = clazz.getDeclaredMethods();
for(Method m : declaredMethods){
  // 獲取注解
  Annotation[] annotations = m.getAnnotations();
  // 權(quán)限修飾符
  System.out.println("Modifier:"+Modifier.toString(m.getModifiers()));
  // 返回值類型
  Class reture = m.getReturnType();
  // 形參列表
  Class[] params = m.getParameterTypes();
  // 方法名
  System.out.println(m.getName());
  // 異常類型
  Class[] exceptions = m.getExceptionTypes();
}

獲取父類信息

// 獲取父類
Class superClass = clazz.getSuperclass();

// 獲取帶泛型的父類
Type superType = clazz.getGenericSuperclass();

// 獲取父類的泛型
if(superType instanceof ParameterizedType){ // 如果存在泛型
  Type[] actualTypeArguments = ((ParameterizedType) superType).getActualTypeArguments();
}

獲取接口

// 獲取實現(xiàn)的接口
Class[] interfaces  = clazz.getInterfaces();

獲取包

// 獲取所在的包
Package aPackage = clazz.getPackage();

獲取注解

// 獲取注解
Annotation[] annotations  = clazz.getAnnotations();

反射為屬性賦值

反射執(zhí)行方法

// 通過反射獲取方法,并調(diào)用
Method method = clazz.getMethod("display");
method.invoke(person);

以上就是一文搞懂java反射基本API的詳細內(nèi)容,更多關(guān)于java反射基本API的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java Zip文件讀寫操作詳解

    Java Zip文件讀寫操作詳解

    這篇文章主要為大家詳細介紹了如何利用Java ZipInputstream、ZipOutputStream實現(xiàn)獲取每個文件中的內(nèi)容與寫入內(nèi)容,感興趣的可以動手嘗試一下
    2022-11-11
  • SpringCloud zuul 網(wǎng)關(guān)如何解決跨域問題

    SpringCloud zuul 網(wǎng)關(guān)如何解決跨域問題

    這篇文章主要介紹了SpringCloud zuul網(wǎng)關(guān)解決跨域問題的具體實現(xiàn)方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Spring?Security實現(xiàn)用戶名密碼登錄詳解

    Spring?Security實現(xiàn)用戶名密碼登錄詳解

    這篇文章主要為大家詳細介紹了Spring Security如何實現(xiàn)用戶名密碼登錄功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-10-10
  • 基于IDEA2018卡死不動的解決方式(好用)

    基于IDEA2018卡死不動的解決方式(好用)

    這篇文章主要介紹了基于IDEA2018卡死不動的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java設(shè)計模式之中介者模式(Mediator Pattern)簡介

    Java設(shè)計模式之中介者模式(Mediator Pattern)簡介

    這篇文章主要介紹了Java設(shè)計模式之中介者模式(Mediator Pattern),需要的朋友可以參考下
    2014-07-07
  • SpringBoot使用自定義json解析器的使用方法

    SpringBoot使用自定義json解析器的使用方法

    本篇文章主要介紹了SpringBoot使用自定義json解析器的使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • SpringBoot+jpa配置如何根據(jù)實體類自動創(chuàng)建表

    SpringBoot+jpa配置如何根據(jù)實體類自動創(chuàng)建表

    這篇文章主要介紹了SpringBoot+jpa配置如何根據(jù)實體類自動創(chuàng)建表,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot?MCP?入門使用步驟詳解

    SpringBoot?MCP?入門使用步驟詳解

    這篇文章主要介紹了SpringBoot?MCP?入門使用,本文分步驟給大家介紹的非常詳細,需要的朋友可以參考下
    2015-09-09
  • Java字符串轉(zhuǎn)駝峰格式的方法

    Java字符串轉(zhuǎn)駝峰格式的方法

    在開發(fā)場景中,我們會遇到一些涉及字符串的轉(zhuǎn)化,本文主要介紹了Java字符串轉(zhuǎn)駝峰格式的方法,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Mybatis延遲加載原理和延遲加載配置詳解

    Mybatis延遲加載原理和延遲加載配置詳解

    這篇文章主要介紹了Mybatis延遲加載原理和延遲加載配置詳解,MyBatis中的延遲加載,也稱為懶加載,是指在進行表的關(guān)聯(lián)查詢時,按照設(shè)置延遲規(guī)則推遲對關(guān)聯(lián)對象的select查詢,需要的朋友可以參考下
    2023-10-10

最新評論