一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - JAVA教程 - java反射獲取和調(diào)用方法

java反射獲取和調(diào)用方法

2021-02-27 14:10sun_Hmtl JAVA教程

本篇內(nèi)容主要給大家詳細(xì)講解了java反射獲取方法以及調(diào)用方法,需要的朋友參考學(xué)習(xí)一下吧。

Class類中獲取方法:
public Method[] getMethods();//獲取包括自身和繼承(實(shí)現(xiàn))過來的所有的public方法——Method不支持泛型<>,即后面不接<>
public Method[] getDeclaredMethods();//獲取自身所有的方法(private、public、protected,和訪問權(quán)限無關(guān)),不包括繼承的
在jdk1.8后可以直接獲取私有屬性的方法不需要設(shè)置權(quán)限 但是僅限于getDeclaredMethod方法 對于Method 的方法仍然需要設(shè)置
權(quán)限。
public Method[] getMethod(String methodName, Class<T>...parameterTypes);//表示獲取指定的一個公共的方法,包括繼承的
參數(shù): methodName:表示獲取的方法的名字
parameterTypes:表示獲取的方法的參數(shù)的Class類型
public Method[] getDeclaredMethod(String methodName, Class<T>...parameterTypes);//表示獲取本類中的一個指定的方法(private、protected、public,與訪問權(quán)限無關(guān)),不包括繼承的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Class clazz = new Person().getClass();
 try {
  //調(diào)用指定的方法
  /*@SuppressWarnings("unchecked")
  Method me = clazz.getDeclaredMethod("getName", String.class);
  me.invoke(clazz.newInstance(),"zhangsan");*/
  //獲取所有的方法
  Method[] methods = clazz.getDeclaredMethods();
  for (Method method : methods) {
  System.out.println(method.getName());
  }
 } catch (Exception e) {
  e.printStackTrace();
 }

對于多個參數(shù)的方法調(diào)用:getDeclaredMethod后面跟的parameterTypes可以理解為Class類型的形參 ,通過調(diào)用invoke來賦實(shí)參 多個參數(shù)的賦值 最好是包裝在new Object[]{}中 。

?
1
2
3
@SuppressWarnings("unchecked")
Method method = clazz.getDeclaredMethod("getName",new Class[]{String.class,int.class});
method.invoke(new Person(), new Object[]{"zhangsan",10});

調(diào)用靜態(tài)方法

?
1
2
3
4
5
6
7
8
class User{
public static void staticMethod(){
System.out.println(“static mthod invoke.”);
}
}
Eg:
Class<User> clz=User.class;
Method staticMethod=clz.getMethod(“staticMthod”);

 

兩種方式調(diào)用靜態(tài)方法:

1. 因?yàn)殪o態(tài)方法屬于所有實(shí)例對象公共的,可以創(chuàng)建該類的一個任意對象,通過該對象調(diào)用
staticMethod.invoke(clz.newInstance());//staticMethod無參,故參數(shù)列表類型不填

2. 如果底層方法是靜態(tài)的,那么可以忽略指定的obj參數(shù),將obj參數(shù)設(shè)置為null即可
staticMethod.invoke(null);

 

更多相關(guān)的內(nèi)容:

一:反射概念

可以通過Class類獲取某個類的成員變量以及方法,并且調(diào)用之。

二:通過反射獲取方法、變量、構(gòu)造方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
@Test
 // 通過反射獲取類定義的方法
 public void testMethod() throws Exception {
  @SuppressWarnings("rawtypes")
  Class clazz = Class.forName("java.lang.String");
  Method[] m = clazz.getDeclaredMethods();
  for (int i = 0; i < m.length; i++) {
   System.out.println(m[i].getName() + " " + m[i].getDeclaringClass());
  }
 }
 
 @Test
 // 通過反射獲取類定義的變量
 public void testField() throws Exception {
  @SuppressWarnings("rawtypes")
  Class clazz = Class.forName("java.lang.String");
  Field[] fields = clazz.getFields();
  for (Field f : fields) {
   System.out.println(f.getName());
  }
 }
 
 @Test
 // 通過反射獲取類定義的構(gòu)造方法
 public void testConstructor() throws Exception {
  @SuppressWarnings("rawtypes")
  Class clazz = Class.forName("java.lang.String");
  @SuppressWarnings("rawtypes")
  Constructor[] cons = clazz.getConstructors();
  for (@SuppressWarnings("rawtypes")
  Constructor c : cons) {
   System.out.println(c + " " + c.getDeclaringClass());
  }
 }

三:通過反射調(diào)用類定義的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Test
 // 通過反射調(diào)用類定義的方法
 public void testInvokeMethod() throws Exception {
  Class clazz = Class.forName("java.lang.String");
  // 定義參數(shù)類型
  Class[] params = new Class[1];
  params[0] = String.class;
  Method m = clazz.getDeclaredMethod("indexOf", params);
  // 設(shè)置參數(shù)
  Object[] p = new Object[1];
  p[0] = "e";
  Integer s = (Integer) m.invoke("helloworld!", p);
  System.out.println(s);
 }

原文鏈接:http://blog.csdn.net/sun_Hmtl/article/details/78703071

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 师尊被各种play打屁股 | 欧美日韩在线观看精品 | 狠狠综合久久综合网站 | 肉文np高h | 美女无遮挡 | 欧美一区二区三区视视频 | 2020年最新国产精品视频免费 | 日韩一级片在线播放 | 桃色视频破解版 | gogo人体模特啪啪季玥图片 | 多人群p全肉小说 | 国产精品麻豆免费版 | 99久久999久久久综合精品涩 | 色多多在线观看视频 | 亚洲 欧美 国产 综合 在线 | juliaann大战黑人 | 秋霞一级成人欧美理论 | 亚洲成人国产精品 | 亚洲国产中文字幕在线视频综合 | 欧洲男同直粗无套播放视频 | 国产成人综合精品一区 | 506070老熟肥妇bbwxx视频 500第一精品 | 亚洲AV 无码AV 中文字幕 | 美女脱一净二净不带胸罩 | 日韩美女强理论片 | 精品91一区二区三区 | 女人全身裸露无遮挡免费观看 | 波多野结衣52部合集在线观看 | 动漫jk美女被爆羞羞漫画 | 深夜视频免费看 | 草草免费观看视频在线 | 国色天香社区视频免费高清在线观看 | 欧美极品brazzers 高清 | 成人啪啪漫画羞羞漫画www网站 | 精品欧美一区二区三区在线观看 | 亚洲免费一| 国产精品原创永久在线观看 | 惊弦45集免费看 | 国产成人www免费人成看片 | 欧美亚洲综合另类 | 四虎地址8848aa4hc44四虎 四虎成人永久地址 |