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

简介: Android插件化开发基础之Java反射机制研究(1)

一、获得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值;


相关文章
|
1天前
|
缓存 前端开发 Android开发
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
|
5天前
|
Dart 前端开发 Android开发
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
1月前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
69 19
|
1月前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
74 14
|
1月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
150 3
|
1月前
|
搜索推荐 前端开发 测试技术
打造个性化安卓应用:从设计到开发的全面指南
在这个数字时代,拥有一个定制的移动应用不仅是一种趋势,更是个人或企业品牌的重要延伸。本文将引导你通过一系列简单易懂的步骤,从构思你的应用理念开始,直至实现一个功能齐全的安卓应用。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你提供必要的工具和知识,帮助你将创意转化为现实。
|
1月前
|
Java 程序员
深入理解Java异常处理机制
Java的异常处理是编程中的一块基石,它不仅保障了代码的健壮性,还提升了程序的可读性和可维护性。本文将深入浅出地探讨Java异常处理的核心概念、分类、处理策略以及最佳实践,旨在帮助读者建立正确的异常处理观念,提升编程效率和质量。
143 1
|
1月前
|
Java API 开发者
深入理解Java中的异常处理机制
本文探讨了Java编程语言中异常处理的核心概念,包括异常类型、异常捕获与抛出、以及最佳实践。通过分析常见的异常场景和处理策略,旨在帮助开发者更好地理解和运用异常处理机制,提高代码的健壮性和可维护性。文章不仅涵盖了基本的try-catch结构,还深入讨论了自定义异常的创建与使用,以及finally块的重要性和应用。此外,还将介绍一些高级技巧,如多异常捕获和嵌套异常处理,为读者提供全面的技术指导。
103 0
|
1月前
|
Java Android开发 开发者
探索安卓开发:构建你的第一个“Hello World”应用
在安卓开发的浩瀚海洋中,每个新手都渴望扬帆起航。本文将作为你的指南针,引领你通过创建一个简单的“Hello World”应用,迈出安卓开发的第一步。我们将一起搭建开发环境、了解基本概念,并编写第一行代码。就像印度圣雄甘地所说:“你必须成为你希望在世界上看到的改变。”让我们一起开始这段旅程,成为我们想要见到的开发者吧!
46 0
|
16天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
74 17

热门文章

最新文章