Class.forName()、Class.forName().newInstance() 、New 三者区别!
在Java开发特别是数据库开发中,经常会用到Class.forName( )这个方法。通过查询Java Documentation我们会发现使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。
好,到此为止,我们总结如下:
Class.forName("")返回的是类
Class.forName("").newInstance()返回的是object
有数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的时候有的却没有调用newInstance( )方法呢?即有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一 些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?
刚才提到,Class.forName("");的作用是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码 段。而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的 Driver类的代码都必须类似如下:
public class MyJDBCDriver implements Driver {
static {
DriverManager.registerDriver(new MyJDBCDriver());
}
}
既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。
private static final Log LOG = LogFactory.getLog(ProxoolDriver.class);
static {
try {
DriverManager.registerDriver(new ProxoolDriver());
} catch (SQLException e) {
System.out.println(e.toString());
}
}
转载于:https://www.cnblogs.com/civilofficer/archive/2013/01/11/civilofficer.html
Class.forName()、Class.forName().newInstance() 、New 三者区别!相关推荐
- java forname 原理_Java Class.forName()用法和newInstance()方法原理解析
Class.forName()主要功能 Class.forName(xxx.xx.xx)返回的是一个类, Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说 ...
- Class.forName()、Class.class、getClass() 区别
问:简单谈谈你对 Java 中 Class.forName().Class.class.getClass() 三者的理解? Class.class 的形式会使 JVM 将使用类装载器将类装入内存(前提 ...
- java new newinstance_Java中newInstance()和new()区别
一.newInstance()和new()区别: 两者创建对象的方式不同,前者是实用类的加载机制,后者则是直接创建一个类: newInstance创建类是这个类必须已经加载过且已经连接,new创建类是 ...
- Java 之String、StringBuffer 和 StringBuilder 三者区别介绍
String:字符串常量,字符串长度不可变,StringBuffer:字符串变量(Synchronized,即线程安全),StringBuilder:字符串变量(非线程安全). String Stri ...
- C# 总结const、 readonly、 static三者区别:
总结const. readonly. static三者区别: (有人问我,看似简单,我也没能立刻回答出来,总结一下,分享一下.) const:静态常量,也称编译时常量(compile-time con ...
- JavaScript中String的slice(),substr(),substring()三者区别
JavaScript中String的slice(),substr(),substring()三者区别 共同之处 从给定的字符串中截取片段,并返回全新的这片段的字符串对象,且不会改动原字符串. 具体不同 ...
- 【C++容器】数组和vector、array三者区别和联系
目录 一.数组 二.向量vector 三.数组与vector的对比 array和vector,数组三者区别和联系 共同点 不同点 作者:bandaoyu,本文不断更新,源文:https://blog. ...
- 互联网(internet)、因特网(Internet)、万维网(World Wide Web)三者区别
互联网(internet).因特网(Internet).万维网(World Wide Web)三者区别 计算机网络 互连网 互联网 因特网 万维网 万维网与超文本系统 三者联系 计算机网络 简称网络. ...
- xposed、frida、以及平头哥框架三者区别
文章目录 一.Xposed 二.Frida 三.平头哥(ratel)框架 四.三者区别(重点) 提示:以下是本篇文章正文内容,下面案例可供参考 一.Xposed Xposed 框架是一款可以在不修改 ...
- BVR、RV、BV电线三者区别
BVR.RV.BV电线三者区别 个人学习用途博客 部分内容摘抄自网络
最新文章
- 关于Windows 7的64位系统不兼容某些控件的问题
- Sublime-text
- 修改anaconda3 jupyter notebook 默认路径
- linux中iptable中端口,Linux如何打开iptables中的端口
- Java笔试之Singleton
- 029——VUE中键盘语义修饰符
- [ 渗透工具篇 ] sqlmap 详解(一) sqlmap 安装详解
- 巨人肩膀_如何站在巨人的肩膀上
- 信创操作系统--统信UOS桌面版(软件管理:应用商店、包管理器)
- 过去式和过去分词的不规则列表
- 新买的移动硬盘不显示盘符?西部数据SSD无痛初始化指南
- delphi 水晶按钮
- 猜一宋词名句 Java_《宋词三百首》里的50个名句,最适合发朋友圈
- 保证只要看一遍,新手也能写出来的超简单五子棋代码
- spring框架多数据源切换问题的解决
- rrpp协议如何修改_华为交换机—RRPP协议
- 路漫漫其修远兮,吾将上下而求索--2019OKR规划
- 使用plugman开发cordova 高德地图定位插件
- Codeforces868F Yet Another MinimizationProblem
- PHP之流程控制(四)
热门文章
- shell 脚本创建虚拟机 并配置网卡ip地址(两个脚本)
- error while loading shared libraries: libconfig.so.8
- 使用 Sharding-Jdbc 实现分库分表、读写分离(未完待续)
- HDU1755 A Number Puzzle【全排列+暴力】
- SpringMVC请求后台地址URL没有.*的几种实现方式
- Java float型数据判断是否相等
- Linux下mail服务器应用之邮件系统的安全性
- 解决XP的IIS HTTP 500”内部服务器错误
- 创建student数据表_创建数据库、表和更改表
- 基于asp. net sql快餐外卖设计网站成品