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值;


相关文章
|
9月前
|
人工智能 缓存 安全
Java中的反射机制:深入探索与应用
Java反射机制是程序运行时动态获取类信息并操作类成员的特性,具备高度灵活性,但也伴随性能与安全风险。本文详解反射的基本用法、高级应用及最佳实践,助你掌握这一强大工具的正确使用方式。
208 0
|
9月前
|
人工智能 安全 Java
掌握Java反射:在项目中高效应用反射机制
Java反射是一种强大功能,允许程序在运行时动态获取类信息、创建对象、调用方法和访问字段,提升程序灵活性。它在框架开发、动态代理、注解处理等场景中广泛应用,如Spring和Hibernate。但反射也存在性能开销、安全风险和代码复杂性,应谨慎使用。
189 0
|
9月前
|
存储 监控 算法
企业上网监控场景下布隆过滤器的 Java 算法构建及其性能优化研究
布隆过滤器是一种高效的数据结构,广泛应用于企业上网监控系统中,用于快速判断员工访问的网址是否为违规站点。相比传统哈希表,它具有更低的内存占用和更快的查询速度,支持实时拦截、动态更新和资源压缩,有效提升系统性能并降低成本。
381 0
|
10月前
|
人工智能 Java
Java中的反射机制:深入探索与应用
本文介绍了Java反射机制的基本概念、用途及其实现方式。反射机制允许程序在运行时动态获取类的属性和方法,并调用它们,适用于处理私有成员或权限受限的情况。文章详细讲解了`Class`类的功能,包括获取类的方法、属性、注解、构造器等信息,以及通过四种方式获取`Class`对象的示例代码。此外,还探讨了类加载器、继承关系判断、动态代理等高级内容,展示了如何在运行时创建接口实例并处理方法调用。文末提供了完整的代码示例以加深理解。
216 0
Java中的反射机制:深入探索与应用
|
Java
Java中的反射机制与应用实例
【10月更文挑战第22天】Java作为一门面向对象的编程语言,提供了丰富的特性来支持对象的创建、操作和交互。其中,反射机制是Java的一项核心特性,它允许程序在运行时动态地获取类的信息、创建对象、调用方法、访问属性等。本文将从三个部分探讨Java中的反射机制及其应用实例:一是反射机制的基本概念和原理;二是反射机制在Java中的应用场景;三是通过实例深入理解反射机制的使用方法和技巧。
125 4
|
Java 数据库连接
深入探索研究Java中的异常处理机制
【10月更文挑战第8天】
109 0
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
651 1
|
IDE Java Linux
探索安卓开发:从基础到进阶的旅程Java中的异常处理:从基础到高级
【8月更文挑战第30天】在这个数字时代,移动应用已经成为我们日常生活中不可或缺的一部分。安卓系统由于其开放性和灵活性,成为了开发者的首选平台之一。本文将带领读者踏上一段从零开始的安卓开发之旅,通过深入浅出的方式介绍安卓开发的基础知识、核心概念以及进阶技巧。我们将一起构建一个简单的安卓应用,并探讨如何优化代码以提高性能和应用的用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和启发。
|
存储 搜索推荐 Java
探索安卓开发中的自定义视图:打造个性化UI组件Java中的异常处理:从基础到高级
【8月更文挑战第29天】在安卓应用的海洋中,一个独特的用户界面(UI)能让应用脱颖而出。自定义视图是实现这一目标的强大工具。本文将通过一个简单的自定义计数器视图示例,展示如何从零开始创建一个具有独特风格和功能的安卓UI组件,并讨论在此过程中涉及的设计原则、性能优化和兼容性问题。准备好让你的应用与众不同了吗?让我们开始吧!
|
Java 调度 Android开发
Android经典实战之Kotlin的delay函数和Java中的Thread.sleep有什么不同?
本文介绍了 Kotlin 中的 `delay` 函数与 Java 中 `Thread.sleep` 方法的区别。两者均可暂停代码执行,但 `delay` 适用于协程,非阻塞且高效;`Thread.sleep` 则阻塞当前线程。理解这些差异有助于提高程序效率与可读性。
439 1
下一篇
开通oss服务