jdbc为什么要用反射机制?

代码如下

 try{
Class.forName("com.mysql.jdbc.Driver");
Connection c=DriverManager.getConnection(url);
}catch(Exception e){
System.err.println("no class!");
}

在这里注册mysql数据库驱动,为什么要用到反射机制?不用反射机制直接import指定的类不行吗?注意重点是为什么

因为反射好用,
为什么好用呢,因为你给个类地址它就能new 一个对象出来,动态的
最重要的是地址是字符串,是一个变量,不是一个具体对象,也就是说它脱离了代码,增加了相当大的灵活性。这里的灵性性是对对象的处理。

个人理解,当你用久了面向对象编程,对一条条规定用烦的时候,你会觉得反射这个机制相当于打破了这些规定,什么对象方法,想怎么弄就怎么弄,想怎么改就怎么改。
反正好用,不过性能上不太好,所以用的都是关键的地方

一般项目里都会有数据库配置文件,其中就有一条是driverName="com.mysql.jdbc.Driver",代码会根据配置文件加载驱动。
当你想换数据库时只要修改driverName的值就可以了,代码就不需要修改
你在代码里直接new 个mysql的Driver,那换数据库时不是还要修改代码中你new 的Driver

import方式也可以,但明显你觉得那个更方便简洁?

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

public class Main {

public void TestJDBC(){

//将配置文件变成输入流
InputStream in =
getClass().getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
try {
//从流中获取配置信息到Properties对象
properties.load(in);
//读取配置文件
String driverClass = properties.getProperty("driver");
String jdbcUrl = properties.getProperty("jdbcUrl");
String user = properties.getProperty("user");
String password = properties.getProperty("password");

//注册驱动
Driver driver = (Driver)Class.forName(driverClass).newInstance();

Connection conn = DriverManager.getConnection(jdbcUrl,user,password);
System.out.println(conn);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
public static void main(String[] args) {
Main m = new Main();
m.TestJDBC2();

}

}

你可以看看什么叫工厂模式,反射的作用就是,无论你使用哪种数据库(数据库类型)只需要把数据库的驱动名称传过来就能穿件对象,而制定类只能创建你制定的数据库对象。

首先你要知道com.mysql.jdbc.Driver的作用是什么,加载这个类实际是注册了对应的jdbc driver,不同的数据库厂商driver是不同的简单理解是类名不同,写死在代码里面不灵活,所以提取出来到配置文件里了。

嗯,,建议百度一下反射和工厂模式。

如果不用反射 你的 驱动注册要写死 是用 MySQL 还是 sqlsever 这样扩展性不好