【Java】java使用反射访问对象方法和成员变量
2023-09-14 09:01:05 时间
虽然java是一门静态语言,但是java的反射机制却给java提供了很强大的动态特性,其特点是能让java支持在运行时才能得知名称与内部结构的类,并能访问其所有的方法和成员变量,包括私有方法和私有成员变量。下面我写了一个比较简洁的测试代码,供参考和使用。
//OBClass.java
package com.obo.javaassistdemo;
public class
利用Java来访问Redis并对Redis进行相关操作以及spring+redis集成配置与注解式注解 redis缓存的一些注意事项 只应将热数据放到缓存中 所有缓存信息都应设置过期时间 缓存过期时间应当分散以避免集中过期 缓存key应具备可读性 应避免不同业务出现同名缓存key 可对key进行适当的缩写以节省内存空间 选择合适的数据结构 确保写入缓存中的数据是完整且正确的 避免使用耗时较长的操作命令,如:keys * Redis默认配置中操作耗时超过10ms即视为慢查询 一个key对应的数据不应过大 对于string类型,一个key对应的value大小应控制在10K以内,1K左右更优hash类型,不应超过5000行
虽然java是一门静态语言,但是java的反射机制却给java提供了很强大的动态特性,其特点是能让java支持在运行时才能得知名称与内部结构的类,并能访问其所有的方法和成员变量,包括私有方法和私有成员变量。下面我写了一个比较简洁的测试代码,供参考和使用。
测试类
//OBClass.java package com.obo.javaassistdemo; public class OBClass { public int publicField= 999; private int privateField = 234; public static void main(String[] args) { System.out.println("hello world" + new OBClass().privateField); new OBClass().privateMethod(); public void publicMethod() { System.out.println("test public method"); public void publicMethodWithParam(String param) { System.out.println("test publicMethodWithParams param is " + param); private void privateMethod() { System.out.println("test private method"); public static void staticMethod() { System.out.println("test static method");利用反射来调用测试类的方法和成员变量。
//JavaAssistDemo.java package com.obo.javaassistdemo;上面分别提供了多种方法和成员变量的访问方式,可以组合起来进行使用。
public class JavaAssistDemo { public static void main(String []args) throws NotFoundException, CannotCompileException, IOException, IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException { reflex(); //反射 private static void reflex() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, NoSuchFieldException { //创建一个OBClass实例对象 OBClass obClass = new OBClass(); //获取OBClass的类对象 Class myClass = OBClass.class; /// 无参数的public方法 //反射回去OBClass中的方法名为publicMethod的方法 Method publicMethod = myClass.getDeclaredMethod("publicMethod"); //更改publicMethode方法的可访问属性为public //访问publicMethod方法 publicMethod.invoke(obClass); /// 带参数的public方法 //反射回去OBClass中的方法名为publicMethod的方法 Method publicMethodWithParam = myClass.getDeclaredMethod("publicMethodWithParam",String.class); //更改publicMethode方法的可访问属性为public //访问publicMethod方法 publicMethodWithParam.invoke(obClass,"hello"); /// 无参数的private方法 //反射回去OBClass中的方法名为publicMethod的方法 Method privateMethod = myClass.getDeclaredMethod("privateMethod"); //更改privateMethod方法的可访问属性为public,要想访问private方法必须要修改这一项 privateMethod.setAccessible(true); //访问privateMethod方法 privateMethod.invoke(obClass); /// 无参数的static方法 //反射回去OBClass中的方法名为publicMethod的方法 Method staticMethod = myClass.getDeclaredMethod("staticMethod"); //访问static方法,静态方法的时候可以使用类对象作为参数 staticMethod.invoke(myClass); /// 获取public 成员变量 Field publicField = myClass.getDeclaredField("publicField"); publicField.setAccessible(true); System.out.println("" + publicField.getInt(obClass)); /// 获取private 成员变量 Field privateField = myClass.getDeclaredField("privateField"); privateField.setAccessible(true); System.out.println("" + privateField.getInt(obClass)); }
有了java的反射机制,我们可以实现非常有意思也非常灵活的功能,比如说可以使用java类来创建数据库表的映射、也可以与javaassist的联合起来用于修改第三方api等。
利用Java来访问Redis并对Redis进行相关操作以及spring+redis集成配置与注解式注解 redis缓存的一些注意事项 只应将热数据放到缓存中 所有缓存信息都应设置过期时间 缓存过期时间应当分散以避免集中过期 缓存key应具备可读性 应避免不同业务出现同名缓存key 可对key进行适当的缩写以节省内存空间 选择合适的数据结构 确保写入缓存中的数据是完整且正确的 避免使用耗时较长的操作命令,如:keys * Redis默认配置中操作耗时超过10ms即视为慢查询 一个key对应的数据不应过大 对于string类型,一个key对应的value大小应控制在10K以内,1K左右更优hash类型,不应超过5000行
相关文章
- java分布式事务框架_Java分布式事务,及解决方案
- java除法保留两位小数_JAVA除法保留小数点后两位的两种方法
- java 把对象转成map_Java对象转换成Map[通俗易懂]
- java反转数组_Java实现数组反转翻转的方法实例
- java setproperty 未生效_Java System类setProperty()方法及示例[通俗易懂]
- java dom4j 添加节点_Java dom4j获取,添加,删除,查找,设置Element节点方法「建议收藏」
- java中random方法取值范围_Java Random.nextInt()方法,随机产生某个范围内的整数
- 【说站】java反射获取对象的方法
- Java的定时器_JAVA定时任务
- java字符串转换为json对象6_Json对象与Json字符串的转化、JSON字符串与Java对象的转换…
- java 对象拷贝方法beanutils_java copy方法
- 创建线程池的方法_java引用就是对象本身
- java cookie操作的封装 常用判断方法的封装详解编程语言
- Java数组去掉重复的方法集详解编程语言
- 在Linux中查看Java线程:一种方法(linux查看java线程)
- Linux下Java开发入门指南(linux下java开发)
- Java Set.contains()方法:判断Set集合是否包含指定的对象
- Java Set.isEmpty()方法:判断Set集合对象是否为空
- Java远程登录Linux服务器入门指南(java远程linux)
- 时间Java中设置Redis过期时间的方法 解决Redis在Java中设置过期时间的方法(redisjava过期)
- 实战探索:Java中使用Redis缓存(java的redis案例)
- 测试Java操作Redis实例(java测试redis)
- 国内首本系统讲解Java异步编程的书籍-java异步编程实战
- 使用Java去连接MySQL数据库(java jdbc mysql)
- 一部分Oracle驱动Java的成功之路(java是oracle的)
- java去除集合中重复元素示例分享java去除重复
- Java中典型的内存泄露问题和解决方法