日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android插件化开发基础之Java反射机制研究

發布時間:2023/12/4 Android 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android插件化开发基础之Java反射机制研究 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、獲得Class對象

?

Class<?> c = Class.forName("classname"); 拋出ClassNotFoundException

?

?

二、獲得實現接口

?

?

Class<?> inters[] = c.getInterfaces(); for(int i=0;i<inters.length;i++){System.out.print(inters[i].getName()+" "); //getName()方法為取得接口名稱; }

?

?

三、獲得父類

Class<?> superClass = c.getSuperclass(); //獲得父類 String name = superClass.getName(); //獲得父類名稱

?

?

?

?

四、取得構造方法

Constructor cons[] = c.getConstructors(); //獲得公開的構造方法 Constructor dcons[] = c.getDeclaredConstructors(); //獲得全部構造方法 String modifier = Modifier.toString(cons[i].getModifiers()); //獲得訪問權限 String name = cons[i].getName(); //獲得構造方法名稱 Class<?> params[] = cons[i].getParameterTypes(); //獲得參數類型對象


五、獲得Method

?

Method ms[] = c.getMethods(); //返回公共的全部方法,包括繼承方法 Method dms[] = c.getDeclaredMethods(); //返回本類全部方法,不包括繼承的方法 Class<?> rt = ms[i].getReturnType(); Class<?>params[] = ms[i].getParameterTypes(); String name = ms[i].getName(); String modifier = Modifier.toString(ms[i].getModifiers()); Class<?>ex[] = ms[i].getExceptionTypes(); //獲得異常 String name = ex[i].getName(); //獲得異常名稱


六、獲得Field

Field fs[] = c.getFields(); //獲得公共屬性,包括繼承屬性 Field dfs[] = c.getDeclaredFields(); // 獲得本類全部屬性 Class<?> type = fs[i].getType(); //獲得屬性的類型對象 String name = fs[i].getName(); //獲得屬性的名稱 String modifier = Modifier.toString(fs[i].getModifiers());

?

?

七、通過反射創建一個對象

(1) Class<?> c = Class.forName("Person"); Person p = (Person)c.newInstance(); (2) Constructor con = c1.getConstructor(Class....param); Object obj = con.newInstance(Object obj); //根據構造函數創建一個實例八、Constructor創建對象 Class c = Class.forName("Person"); Constructor<?> cons[] = c.getConstructors(); Person p = (Person)cons[0].newInstance("xiazdong",15); 注:如果調用的構造函數為私有,則需要c.setAccessible(true);

?

?

?

?

?

?

?

九、調用特定方法
Method m = c1.getMethod("funcname",Class<?>...c); ? //funcname表示調用方法的名稱,c表示參數的Class對象
例如:Method m = c1.getMethod("fun",String.class,int.class); ? ?表示調用fun(String,int);函數
Object obj = m.invoke(c1.newInstance(),"xiazdong",20); ? //如果有返回值,則invoke函數返回;
注:如果是調用靜態的方法,則不需要設置對象;
Object obj = m.invoke(null,"xiazdong");

注:如果參數中有數組,比如 public static void main(String[]args);

Method m = c1.getMethod("main",String[].class);
m.invoke(null,(Object)new String[]{"aa","bb"});是對的;
m.invoke(null,new String[]{"aa","bb"}); 會調用 main(String,String);函數;

十、調用特定屬性
Field f = c1.getDeclaredField("name"); ? ?//返回name屬性
f.setAccessible(true); ? ?//私有屬性可見
String name = (String)f.get(Object obj); ? //返回obj對象的name屬性的值
f.set(Object obj,String n); ? ? ?//設置obj對象的name屬性為n值;


十一、操作數組
int tmp[] = {1,2,3};
Class<?> c ?= tmp.getClass().getComponentType();
Array.getLength(tmp); ? ? ? ?//tmp數組的長度
c.getName(); ? ? ? ? ? //獲得數組類型名稱
Array.get(Object obj,int index); ? ? ?//獲得obj數組的index索引的數值
Array.set(Object obj,int index,VALUE); ? ?//設置obj數組的index索引的數值為value;
Object obj ?= Array.newInstance(c,length); ? ? ? ? ?//c為數組的類型,length為數組的長度;obj為返回的數組對象;

?

import java.lang.reflect.*; public class GetMethodDemo01{ public static void main(String args[])throws Exception{ Class<?> c1 = Class.forName("Person"); Method m = c1.getMethod("sayHello"); m.invoke(c1.newInstance()); Method m2 = c1.getMethod("sayHello2",String.class,int.class); String str = (String)m2.invoke(c1.newInstance(),"xiazdong",123); System.out.println(str); Field nameField = c1.getDeclaredField("name"); Field ageField = c1.getDeclaredField("age"); nameField.setAccessible(true); ageField.setAccessible(true); Person obj = (Person)c1.newInstance(); obj.setName("xzdong"); obj.setAge(12); System.out.println(nameField.get(obj)); System.out.println(ageField.get(obj)); Method setName = c1.getMethod("setName",String.class); setName.invoke(obj,"changed"); Method getName = c1.getMethod("getName"); System.out.println(getName.invoke(obj)); int tmp[] = {1,2,3}; Class<?> c3 = tmp.getClass().getComponentType(); System.out.println(c3.getName()); System.out.println("第一個數:"+Array.get(tmp,0)); Array.set(tmp,0,5); System.out.println("第一個數:"+Array.get(tmp,0)); Object arr = Array.newInstance(c3,5); System.arraycopy(tmp,0,arr,0,Array.getLength(tmp)); System.out.println(Array.get(arr,2)); System.out.println(Array.get(arr,3)); } } import java.lang.reflect.*; public class GetMethodDemo01{public static void main(String args[])throws Exception{Class<?> c1 = Class.forName("Person");Method m = c1.getMethod("sayHello");m.invoke(c1.newInstance());Method m2 = c1.getMethod("sayHello2",String.class,int.class);String str = (String)m2.invoke(c1.newInstance(),"xiazdong",123);System.out.println(str);Field nameField = c1.getDeclaredField("name");Field ageField = c1.getDeclaredField("age");nameField.setAccessible(true);ageField.setAccessible(true);Person obj = (Person)c1.newInstance();obj.setName("xzdong");obj.setAge(12);System.out.println(nameField.get(obj));System.out.println(ageField.get(obj));Method setName = c1.getMethod("setName",String.class);setName.invoke(obj,"changed");Method getName = c1.getMethod("getName");System.out.println(getName.invoke(obj));int tmp[] = {1,2,3};Class<?> c3 = tmp.getClass().getComponentType();System.out.println(c3.getName());System.out.println("第一個數:"+Array.get(tmp,0));Array.set(tmp,0,5);System.out.println("第一個數:"+Array.get(tmp,0));Object arr = Array.newInstance(c3,5);System.arraycopy(tmp,0,arr,0,Array.getLength(tmp));System.out.println(Array.get(arr,2));System.out.println(Array.get(arr,3));} } import java.lang.reflect.*; interface China{ public static final String NAME = "CHINA"; public int AGE = 60; public void sayHello(); public String sayHello2(String name,int age); } class Person implements China{ private String name; private int age; public String getName(){ return name; } public void setName(String name){ this.name = name; } public int getAge(){ return age; } public void setAge(int age){ this.age = age; } public void sayHello(){ System.out.println(NAME+" "+AGE); } public String sayHello2(String name,int age){ return name+" "+age; } }

?

import java.lang.reflect.*; interface China{ public static final String NAME = "CHINA"; public int AGE = 60; public void sayHello(); public String sayHello2(String name,int age); } class Person implements China{ private String name; private int age; public String getName(){ return name; } public void setName(String name){ this.name = name; } public int getAge(){ return age; } public void setAge(int age){ this.age = age; } public void sayHello(){ System.out.println(NAME+" "+AGE); } public String sayHello2(String name,int age){ return name+" "+age; } }

?

?

?

?

?

?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的Android插件化开发基础之Java反射机制研究的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。