第一次接触反射,是在JDBC的驱动加载中。
JDBC连接基本流程:
1.加载驱动 (选择数据库)
硬编码: new oracle.jdbc.driver.OracleDriver();
软编码: class.forName(“oracle.jdbc.driver.OracleDriver”)
2.获取连接 (与数据库建立连接)
Connection con =DriverManager.getConnection(“jdbc:oracle:thin:@服务器地址:端口:orcl”,“用户名”,“密码”)
3.准备sql
4.创建处理块 (发送执行sql的工具)
静态处理快:Statement
预处理快:PreparedStatement
5.发送sql
6.获取结果集
利用next(),getXxx(索引列名或别名)来分析数据
7关闭
JAVA反射机制是在运行状态中
对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
原理
要想解剖一个类,必须先要获取到该类的字节码文件对象(class)。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象
class类 :代表一个类,是Java反射机制的起源和入口
用于获取与类相关的各种信息, 提供了获取类信息的相关方法
Class类继承自Object类
Class类是所有类的共同的图纸
每个类有自己的对象,同时每个类也看做是一个对象,有共同的图纸Class,存放类的结构信息,能够通过相应方法取出相应的信息:类的名字、属性、方法、构造方法、父类和接口。
功能
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时调用任意一个对象的方法
得到该对象所属的类:
Class ownerClass = owner.getClass()
在运行时构造一个类的对象:
Class newoneClass = Class.forName(className):
得到要构造的实例的Class。
Constructor cons = newoneClass.getConstructor(argsClass):得到构造器。
cons.newInstance(args):新建实例。
在运行时判断一个类所具有的成员变量和方法:
Class ownerClass = owner.getClass():得到该对象的Class。
Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。
Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。
在运行时调用一个对象的方法:
Method method = ownerClass.getMethod(methodName, argsClass):通过Method名和参数的Class数组得到要执行的Method。
method.invoke(owner, args):执行该Method,invoke方法的参数是执行这个方法的对象,和参数数组。
返回值是Object,也既是该方法的返回值。