JDBC的Class.forName

一只独孤的程序猿 2012-02-10 01:16:59
在java连接数据库的时候,必不可少的一个操作,Class.forName();
这样就是用到了java的反射机制,加载了数据库驱动的类,
但是问题就是,我只是加载了,但是没有具体的调用啊,下面紧接着就是DriverManage的使用了,
没有把相应的Class.forName()赋值给一个Class的实例对象,那么在内存里面他是具体怎么实现的呢?
...全文
214 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fearlessMore 2012-02-10
  • 打赏
  • 举报
回复
现在不需要什么Class.forName().当然是Java 6或JDBC 4.0之后. Java为了简化代码和美观,采用了自加载.对于Class.forName()本身的功能而言,实际上是是实例化了一个有String name代表的类:Returns the Class object associated with the class or interface with the given string name. Invoking this method is equivalent to:
Class.forName(className, true, currentLoader)
A call to forName("X") causes the class named X to be initialized.
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zl3450341 的回复:]

楼主去我的博客看一下那篇《服务提供者框架》 博客吧。。。看完你就懂了。
[/Quote]
胡纸出没,请注意
zl3450341 2012-02-10
  • 打赏
  • 举报
回复
楼主去我的博客看一下那篇《服务提供者框架》 博客吧。。。看完你就懂了。
  • 打赏
  • 举报
回复
哦,了然
安特矮油 2012-02-10
  • 打赏
  • 举报
回复
给你一个例子:

package com;

public class Test {

static int a;

public static void main(String[] args)throws Exception{
Class.forName("com.A");
System.out.println(a);
}
}

class A{

static{
Test.a = 10;
}

}

在加载drivers的时候可以告诉DriverManager处理的是什么数据库,需要什么样的URL等等信息。
  • 打赏
  • 举报
回复
我们通常的对于对象或者是接口的时候,都会有一个实例化的方法,然后有一个对象的引用指向他,但是想在就是加载一下,就能用了?
otomedaybreak 2012-02-10
  • 打赏
  • 举报
回复
你也可以不用Class.forName,直接在DriverManager注册,原理是一样的,不过不建议你使用DriverManager了,现在还是用DataSource比较好
MiceRice 2012-02-10
  • 打赏
  • 举报
回复
Class.forName(); 会导致JVM装载该目标类的类定义。

这又会触发什么呢?会触发目标类static操作,那么目标类的static操作会到DriverManage去注册自己,然后DriverManage就能知道它能处理什么类型的 数据库URL 了。
  • 打赏
  • 举报
回复
DriverManage去实例化
soli11722984 2012-02-10
  • 打赏
  • 举报
回复
意思是把那个类的类型加载到类加载器去,然后通过DriverManage去实例化一个实例

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧