黑马程序员-java基础之反射以及反射的常用

来源:互联网 发布:西门子工业软件 编辑:程序博客网 时间:2024/06/05 02:56
 ---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

一.反射
 1.什么是反射
  反射就是通过.class文件来操作一个类, 可以调用构造函数, 执行方法, 访问成员变量.
  反射可以让程序变得更加灵活, 例如: 可以通过一个字符串创建对象, 通过一个方法名调用方法, 通过变量名访问变量
  以后在使用框架的时候, 我们经常会在配置文件中指定一些配置, 而框架会自动使用这些配置创建对象, 调用方法, 给变量赋值, 执行一些工作.
 2.使用类名创建对象
  以后的编程过程中经常会使用配置文件, 在配置文件中写一个类名, 然后程序运行时就会创建这个类的对象, 使用对象进行工作.
  这里就需要根据类名灵活的创建对象.
  可以使用Class.forName(String)方法传入一个类名, 获取一个Class对象(.class文件), 然后可以调用Class.newInstance()方法创建该类实例.
 3.使用类中其他构造函数
  Class.newInstance()方法默认调用类中无参的构造函数, 如果想调其他有参构造函数, 需要获取构造函数之后再调用.
  调用Class.getConstructor(Class...)方法, 传入指定的参数类型, 就可以获取指定的构造函数.
  再调用Constructor.newInstance(Object...)方法, 传入指定参数, 就可以调用该构造函数创建对象了.
 4.获取Class的3种方式
  Class.forName(String)
  Object.getClass()
  类名.class
 5.使用类中的方法
  Class.getMethod(String, Class...)方法可以获取该类中的可见方法, 包括继承的
  Class.getDeclaredMethod(String, Class...)方法可以获取该类中定义的方法, 包括私有的
  以上方法都会获取到Method, 而使用Method.invoke(Object, Object...)即可调用该方法
  如果方法不可见可以使用Method.setAccessible(boolean)方法设置其可见
 6.使用类中的成员变量 
  Class.getField(String)方法可以获取该类中可见的成员变量, 包括继承的
  Class.getDeclaredField(String)方法可以获取该类中定义的成员变量, 包括私有的
  以上方法都会获取到Field, 而使用Filed.get(Object)方法可以获取指定对象的成员变量的值
  使用Filed.set(Object, Object)方法可以设置指定对象的成员变量的值
  如果成员宾利不可见可以使用Field.setAccessible(boolean)方法设置其可见
 ---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

原创粉丝点击