知识点
一、获取类对象、
方法一
代码实现:
Class myDriver = Class.forName("com.mysql.jdbc.Driver");
方法二:
代码实现:
Class mysqlDriver = com.mysql.jdbc.Driver.class;
注:方法二中Driver前面的东西可以不写,如果把Driver引入的话。
二、获取类的父类
代码实现:
Class driverSuperClass = mysqlDriver.getSuperclass();
三、获取实现接口的类
代码实现:
Class psClass = PreparedStatement.class;
Class[] psSuper = psClass.getInterfaces();
for(Class superInter : psSuper) {
System.out.println("====================>" + superInter.getName());
}
四、获取构造方法
1、获取非私有的方法
代码实现:
Class driverClass = Driver.class;
//获取所有的构造方法
Constructor[] cons = driverClass.getConstructors();
for(Constructor con : cons) {
System.out.println("**************>" + con.getParameterCount());
Class[] prarmeterArray = con.getParameterTypes();
for(Class parameter : prarmeterArray) {
System.out.println("parameterTypes:" + parameter.getName());
}
}
2、获取私有的构造方法
代码实现:
try {
Constructor con = driverClass.getDeclaredConstructor(String.class, String.class);
System.out.println("con: getParameterCount: " + con.getParameterCount());
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
}
补充:
Class<T> getDeclaringClass():返回声明Constructor对象对应构造方法的类的Class对象。
int getModifiers():以整数形式返回Constructor对象表示的构造函数的修饰符。
String getName() :以字符串形式返回Constructor对象所表示得构造方法的名称。
Class<?>[] getParameterTypes():返回由Constructor对象所表示的构造方法的形参类型对应Class对象组成的数组此 。如果构造方法没有参数,则数组长度为0。
五、通过构造方法创建对象
//类对象
Class dclass = Driver.class;
//当前类型的对象
Driver driver = new Driver("URL");//之前创建对象的方法
Constructor driverCons = dclass.getConstructor(String.class);
//通过构造方法实例化对象
Object o = driverCons.newInstance("URL");
System.out.println("---------------->" + driver);
System.out.println("---------------->" + o);
System.out.println("88888888888888888888888888888888888888888888888888888888888");
//Driver privDriver = new Driver("root", "root");
Constructor driverConsSec = dclass.getDeclaredConstructor(String.class, String.class);
//can not access a member of class com.zzxtit.jsp31.classDemo.Driver with modifiers "private"
Object secObj = driverConsSec.newInstance("root", "root");//当构造方法为私有的,不能通过这种方式构建对象。
System.out.println("=================>" + secObj);
补充:
Constructor getConstrutor(Class<?>... parameterTypes):返回与该Class对象表示类中参数列表相匹配的public构造函数(不含继承)对应的Constructor对象。
六、获取成员变量
1、获取public的成员变量
代码实现:
Class<Driver> dClass = Driver.class;
//获取成员变量(public 成员变量)
Field[] publicFields = dClass.getFields();
System.out.println("------->" + publicFields.length);
2、获取所有的成员变量
代码实现:
//获取所有的成员变量
Field[] fields = dClass.getDeclaredFields();
System.out.println("-------->" + fields.length);
七、给私有变量设置值
Driver driver = dClass.newInstance();
System.out.println("=========>" + driver);
Field url = dClass.getDeclaredField("URL");
url.setAccessible(true);
//
// url.set(driver, "jdbc:mysql://localhost:3306/test");
// System.out.println("=========>" + driver);
Object FieldValue = url.get(driver);
System.out.println("属性:URL的值:" + FieldValue);
注:
如果想要给私有成员变量设置值,须将调用Field的setAccessible()方法并设置为true;