隐藏页面特效

java的反射

1|01. 获取class对象的三种方式


  • Class.forName();
  • 类名.class
  • 实例对象.getClass();

2|02. 利用反射获取构造函数


  • Constructor<?>[] getConstructor() 返回所有公共构造方法对象数组

  • Constructor<?>[] getDeclaredConstructors() 返回所有构造方法对象数组(包括私有)

  • Constructor<?> getConstructor(...数据类型.class) 返回单个公共构造方法对象

  • Constructor<?> getDeclaredConstructor(...数据类型.class) 返回单个构造方法对象(包括私有)

    (1) Constructor类中用于创建对象的方法

    • T newInstance() 根据指定的构造方法创建对象
    • setAccessible(boolean flag) 设置为true,表示取消访问(私有构造方法)检查
@Test public void f2() throws Exception { //通过类名.class加载字节码文件 Class<User> userClass = User.class; //获取private修饰的构造方法 Constructor<User> contructor = userClass.getDeclaredConstructor(String.class, String.class); //设置取消权限检查 contructor.setAccessible(true); //使用该构造方法 User s = contructor.newInstance("张三","123"); System.out.println(s); }

3|03. Class类中用于获取成员变量的方法


  1. Field[] getField() 返回所有公共成员变量对象的数组

  2. Field[] getDeclaredFields() 返回所有成员变量对象的数组(包括私有)

  3. Field getField(String name) 返回单个公共成员变量对象

  4. Fidld getDeclaredField(String name) 返回单个成员变量对象

    (1)Field类中用于创建对象的方法

    ​ --void set(Object obj,Object value) 赋值

    ​ --Object get(Object obj) 获取值

@Test public void f3() throws Exception{ Class<User> userClass = User.class; //获取私有的属性 Field name = userClass.getDeclaredField("name"); name.setAccessible(true); //获取属性名 String str = name.getName(); System.out.println(str); //获取访问修饰符 int modifiers = name.getModifiers(); System.out.println(modifiers); //获取对象的值 User user = new User(1,"张三","123456"); String o = (String)name.get(user); System.out.println(o); //设置对象的值 name.set(user,"李四"); System.out.println(user); }

4|04.利用反射获取成员方法


  1. Method[] getMethods() 返回所有公共成员方法对象的数组(包括继承的)

  2. Method[] getDeclaredMethods() 返回所有成员方法对象的数组,不包括继承

  3. Method getMethod(String name, ...paramterTypes) 返回单个公共成员方法对象

  4. Method getDeclaredMethod(String name, ...paramterTypes) 返回单个成员方法对象

    (1) Method类中用于创建对象的方法

    ​ --Object invoke(Object obj, Object...args) 运行方法

    ​ 参数一:用obj对象调用该方法

    ​ 参数二:调用方法的传递的参数(没有就不写)

    ​ 返回值:方法的返回值(没有不写)

@Test public void f4()throws Exception{ Class<User> userClass = User.class; Method abc = userClass.getDeclaredMethod("abc",String.class); abc.setAccessible(true); String str = (String) abc.invoke(userClass,"李四"); System.out.println(str); }

5|05.反射的作用


  1. 获取一个类里面所有的信息,获取到了之后,再执行其他的业务逻辑
  2. 结合配置文件,动态的创建对象并调用方法。
@Test public void f5()throws Exception{ //对于任意一个对象,都可以把对象所有的字段名和值,保存到文件中去。 Class<User> userClass = User.class; User u = new User(1,"张三","123456"); Field[] declaredFields = userClass.getDeclaredFields(); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("aaa.txt",true)); for (Field field:declaredFields) { field.setAccessible(true); String name = field.getName(); String value = field.get(u)+""; String str = name+"="+value+"\n"; bos.write(str.getBytes()); } bos.flush(); bos.close(); }

__EOF__

本文作者keep on going,never give up
本文链接https://www.cnblogs.com/-xyk/p/17185989.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   彼时听风  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示