JAVA反射机制是在运行状态中, 对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意方法和属性; 这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
Jdbc 加载驱动----- Spring ioc 框架
package cn.qbz.thread;
public class Test112003 {
public static void main(String[] args) throws ClassNotFoundException {
Class c1 = Class.forName("cn.qbz.thread.Test112002");
System.out.println(c1);
Class c2 = Test112002.class;
System.out.println(c2);
Test112002 test112002 = new Test112002();
Class c3 = test112002.getClass();
System.out.println(c3);
}
}
package cn.qbz.thread;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
public class Test112003 {
public static void main(String[] args) throws ClassNotFoundException,
IllegalAccessException, InstantiationException,
NoSuchMethodException, InvocationTargetException {
//通过无参构造器构造创建对象
Class c1 = Class.forName("cn.qbz.thread.User");
User user = (User) c1.newInstance();
user.setName("xiaoMing");
System.out.println(user.getName());
//通过有参构造器创建对象
Constructor constructor = c1.getConstructor(String.class, String.class);
User user2 = (User) constructor.newInstance("xiaoWang", "http://xiaowang.cn");
System.out.println("name:" + user2.getName() + "\t" + "url:" + user2.getUrl());
}
}
class User {
private String name;
private String url;
public User() {
}
public User(String name, String url) {
this.name = name;
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
方法名称 | 作用 |
---|---|
getDeclaredMethods [] | 获取该类的所有方法 |
getReturnType() | 获取该类的返回值 |
getParameterTypes() | 获取传入参数 |
getDeclaredFields() | 获取该类的所有字段 |
setAccessible | 允许访问私有成员 |
package cn.qbz.thread;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Test112003 {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException {
Class usr = Class.forName("cn.qbz.thread.User");
//获取所有属性
Field[] fields = usr.getDeclaredFields();
for (Field field : fields) {
System.out.println("属性:" + field.getName());
}
//获取所有方法
Method[] methods = usr.getDeclaredMethods();
for (Method method : methods) {
System.out.println("method:" + method.getName());
}
//初始化对象
User user = (User) usr.newInstance();
//使用反射赋值属性
Field fieldName = usr.getDeclaredField("name");
// 标记为true 允许反射赋值
fieldName.setAccessible(true);
fieldName.set(user, "xiaoMing");
System.out.println("usr.name:" + user.getName());
}
}
class User {
private String name;
private String url;
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
public class DemoJDBC {
public static void main(String[] args) throws Exception {
// 加载驱动类
Class.forName("com.mysql.jdbc.Driver");
// 通过DriverManager获取数据库连接
String url = "jdbc:mysql://192.168.1.150/test";
String user = "teamtalk";
String password = "123456";
Connection connection = (Connection) DriverManager.getConnection(
url, user, password);
PreparedStatement statement = (PreparedStatement) connection.prepareStatement(
"insert persion (name, age) value (?, ?)");
statement.setString(1, "hdu");
statement.setInt(2, 21);
statement.executeUpdate();
ResultSet resultSet = statement.executeQuery("select * from persion");
// 操作ResultSet结果集
while (resultSet.next()) {
// 第一种获取字段方式
System.out.println(resultSet.getString(1) + " " +
resultSet.getString(2) + " " + resultSet.getString(3));
}
// 关闭数据库连接
resultSet.close();
statement.close();
connection.close();
}
}