浅析jdbc建立连接方式与背后的java类加载
关于jdbc的连接方式#1
Connection conn;
Class.forName("com.mysql.jdbc.Driver"); //2
conn=DriverManager.getConnection("jdbc:mysql://master/shao", USER, PASSWD);
关于java类加载的补充
1.java的类是动态加载的,加载一个类发生在访问类的静态成员,静态方法(构造函数隐式静态的)
2.Class对象:
类是程序的一部分,每个类都有一个Class对象,每编译一个类,就会产生一个Class对象(被保存在同名的class文件中).
所有的类都是对其第一次使用时动态加载到JVM中。类加载器首先检查这个类的Class对象是否已经加载,如果尚未加载,就会根据类名查找对应的.class文件将其加载。(与.java文件无关,因为运行java程序肯定是执行编译后的.class文件)
一旦某个类的Class对象在内存,就可以使用该Class对象创建该类的对象了。
————摘自java编程思想
3.我的理解是.class文件是一个类的描述的字节码,而Class对象是对应着的封装是类的信息的类型对象即Class对象,静态方法,静态成员,构造函数等都属于这个对象,当用其创建一个该类的对象后,这个对象就是jvm堆中的一个普通对象,含有成员属性和成员方法。
4.如何获取Class对象的引用
1.obj.getClass()
2.Class<OneClass> oc=OneClass.class;
3.Class<OneClass> oc=Class.forName("OneClass")
方法2与方法3
共同之处
2者都会从classpath寻找相应的类的字节码,即.class文件,并创建Class对象
不同
方法2采用延迟类初始化机制,类的静态变量和初始化块将在首次访问这个类的静态属性和方法时执行
,但是对编译器常量,即对static final XXX=XXX;指向的编译期常量不会触发初始化。方法3不会延迟初始化
5.Class.forName("com.mysql.jdbc.Driver"); //2
综上,这行代码加载了Driver类,并会执行初始化,再看Driver类的源码,
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
发现它在初始化阶段就已经向DriverManager注册了自己,Driver中有一行注释如下
The DriverManager will try to load as many drivers as it can find and then for any given connection request, it will ask each driver in turn to try to connect to the target URL.
#2
因此
new com.mysql.jdbc.Driver()和
Class.forName("....").newInstance()都是多余的,会创建多余的Driver对象
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
手动注册同样多余,会注册两个一样的Driver(因此调用构造函数时发生了类加载,执行了静态代码块
验证
Enumeration<java.sql.Driver> e=DriverManager.getDrivers();
while(e.hasMoreElements()) {
System.out.println(e.nextElement().getClass().getName());
}
输出
com.mysql.fabric.jdbc.FabricMySQLDriver
com.mysql.jdbc.Driver
com.mysql.jdbc.Driver
浅析jdbc建立连接方式与背后的java类加载的更多相关文章
- Orcal的JDBC数据连接方式
package cn.com.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Prepar ...
- java基础-jdbc——三种方式加载驱动建立连接
String url = "jdbc:mysql://localhost:3306/student?Unicode=true&characterEncoding=utf-8" ...
- JDBC建立/关闭数据库连接
JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- Java中数据库连接池原理机制的详细讲解以及项目连接数据库采用JDBC常用的几种连接方式
连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...
- 转:ORACLE的JDBC连接方式:OCI和THIN
oracle的jdbc连接方式:oci和thin oci和thin是Oracle提供的两套Java访问Oracle数据库方式. thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracl ...
- JDBC纯驱动方式连接MySQL
1 新建一个名为MysqlDemo的JavaProject 2 从http://dev.mysql.com/downloads/connector/j/中下载最新的驱动包. 这里有.tar.gz和.z ...
- Java笔记4:JDBC纯驱动方式连接Oracle
JDBC纯驱动方式连接Oracle 1 下载Oracle提供的驱动程序包 下载地址: http://www.oracle.com/technetwork/database/enterprise-edi ...
- 数据库程序接口——JDBC——API解读第一篇——建立连接的核心对象
结构图 核心对象 Driver Java通过Driver接口表示驱动,每种类型的数据库通过实现Driver接口提供自己的Driver实现类. Driver由属性,操作,事件三部分组成. 属性 公共属性 ...
- Android跟蓝牙耳机建立连接有两种方式
Android 跟蓝牙耳机建立连接有两种方式. 1. Android 主动跟蓝牙耳机连BluetoothSettings 中和蓝牙耳机配对上之后, BluetoothHeadsetService 会收 ...
随机推荐
- C#连接Informix数据库
最近在工作中遇到了需要连接Informix数据库的问题,在通过研究后发现了可以通过多种方式实现,我选择的是通过IBM Informix .NET Provider.该方式需要引用IBM.Data.In ...
- iOS中的分类和扩展
一.什么是分类? 概念:分类(Category)是OC中的特有语法,它是表示一个指向分类的结构体指针.根据下面源码组成可以看到它没有属性列表,原则上是不能添加成员变量(其实可以借助运行时功能,进行关联 ...
- SpringBoot入门系列(三)资源文件属性配置
前面介绍了Spring的@Controller和@RestController控制器, 他们是如何响应客户端请求,如何返回json数据.不清楚的朋友可以看看之前的文章:https://www.cnbl ...
- py装饰器,生成器,迭代器
emmmmm....看了好久才能大概的看懂一点关于装饰器的内容...import sys # 引入sys模块import timeimport functoolsfrom functools impo ...
- 【每日一包0018】fecha
[github地址:https://github.com/ABCDdouyae...] fecha 比moment.js更加轻量级的时间解析和格式化包 format 用法:format(<Dat ...
- html5调用摄像头功能
前言 前些天,线上笔试的时候,发现需要浏览器同意开启摄像头,感觉像是 js 调用的,由于当时笔试,也就没想到这么多
- js实现box(2)(3)这种调用方式的方法
box(2)(3)函数的调用方法有两种: 第一种: var box = function(num1){ return function(num2){ return num1+num2; }; }; a ...
- js事件的三个阶段
js事件的三个阶段分别为:捕获.目标.冒泡 1.捕获:事件由页面元素接收,逐级向下,到具体的元素 2.目标:具体的元素本身 3.冒泡:跟捕获相反,具体元素本身,逐级向上,到页面元素 IE5.5:div ...
- 基础JavaScript练习(一)总结
任务目的 在上一任务基础上继续JavaScript的体验 接触一下JavaScript中的高级选择器 学习JavaScript中的数组对象遍历.读写.排序等操作 学习简单的字符串处理操作 任务描述 参 ...
- 华为物联网IoT学习笔记目录
实验准备: 1.<小熊派功能介绍> 2.<小熊派硬件分析> 3.<STM32Cube软件安装介绍> 4.<MDK软件安装介绍> 5.<华为 IoT ...