`
esperanza
  • 浏览: 183359 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Class.forName

阅读更多

Class.forName(xxx.xx.xx) 返回的是一个类,首先要明白在java里面任何class都要装载在虚拟机上才能运行。这句话的作用是要求JVM查找并加载指定的类 (new 不一样,要分清楚)。静态代码是和class绑定的,class装载成功就表示执行了你的静态代码了。而且以后不会再走这段静态代码了。

我们要创建一个新类可以有2中方式Class t = Class.forName(str)或者使用new方法。前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用等软件设计思想。

Class.forName()其实调用了Class.forName(name, initialize, loader)方法,第二次参数表示装载类的时候是否初始化该类, 即调用类的静态块的语句及初始化静态成员变量。Forname方法的底层其实还是调用classloader来加载class的,和classloader的区别在于ClassLoader.loadClass方法只是将class加载到JVM中,并不会执行其静态初始化代码。

 

Class.forName("com.test.staticClass");

//如期打印出:静态初始化代码执行了...

ClassLoader loader = ClassLoader.getSystemClassLoader();

Class<?> c = loader.loadClass("com.test.staticClass");

//只是加载到JVM,不会打印

c.newInstance();

//打印出:静态初始化代码执行了...

class staticClass{

    static{

        System.out.println("静态初始化代码执行了...");

    }

    public staticClass(){

    }

}

更容易理解的一种方式

SQLServerDriver driver = new SQLServerDriver();

DriverManager.registerDriver(driver);

String url = "jdbc:sqlserver://localhost:1433;DatabaseName=db";

Connection  conn = DriverManager.getConnection(url,"*","***");

 

可以看下SQLServerDriver的源码,其静态初始化代码做的事情就是在DriverManager中进行了注册

 

分享到:
评论

相关推荐

    java中Class.forName方法的作用详解

    Java中的`Class.forName()`方法是一个非常关键的工具,主要用于动态加载类。它的作用在于根据给定的类全名(包括包名)返回对应的`Class`对象。`Class`对象是Java反射机制的基础,它代表着运行时的类信息,可以通过...

    class literal & instance.getClass() & Class.forName(String className)

    在Java编程语言中,"class literal"、"instance.getClass()" 和 "Class.forName(String className)" 是三个与类加载和类型查询紧密相关的概念。了解这些概念对于深入理解Java运行时的类加载机制至关重要。 首先,让...

    Java Class.forName()无法加载类

    NULL 博文链接:https://listen-raining.iteye.com/blog/1894456

    在Java的反射中,Class.forName和Class

    在Java的反射机制中,`Class.forName`和`ClassLoader`都是关键组件,它们在程序运行时动态加载类和实现类的实例化方面扮演着重要角色。理解这两个概念及其区别是深入掌握Java反射的重要一步。 首先,`Class.forName...

    class.forname的作用 详细解析抽象类和接口的区别

    使用 abstract class 的方式定义抽象类可以有自己的数据成员,也可以有非 abstract 的成员方法,而使用 interface 的方式定义抽象类只能有静态的不能被修改的数据成员(也就是必须是 static final 的),所有的成员...

    java中Class.forName的作用浅谈

    在Java编程语言中,`Class.forName()`方法是一个非常重要的功能,它主要用于动态加载类到Java虚拟机(JVM)中。这个方法的主要作用是根据给定的全限定类名(包括包名和类名)来查找并加载对应的类。下面我们将深入...

    Class.forName()_newInstance()_New_三者区别

    在Java编程中,`Class.forName()`, `newInstance()` 和 `new` 关键字都是与对象创建和类加载紧密相关的概念,但它们各自有着不同的用途和限制。 首先,`Class.forName("className")` 是一个静态方法,它用于在运行...

    Java Class.forName()用法和newInstance()方法原理解析

    Java Class.forName()用法和newInstance()方法原理解析 Class.forName()方法是Java语言中的一种Class加载机制,它可以根据类名将对应的类加载到JVM中,同时也可以实例化该类。Class.forName()方法的主要功能是要求...

    注册驱动:Class.forName(xxx.Driver).xmind

    对SPI,理论联系实际的理解

    浅谈java中类名.class, class.forName(), getClass()的区别

    Java 中类名.class, class.forName(), getClass() 的区别 Java 中有三种方式可以获取 Class 对象,即类名.class、class.forName() 和 getClass()。这些方法都可以获取 Class 对象,但是在获取 Class 对象的过程中,...

    liuwei1989#study-guide#17-Class.forName和classloader的区别1

    并且只有调用了newInstance()方法采用调用构造函数,创建类的对象看下Class.forName()源码//Class.forName(String c

    浅析使用JDBC操作MySQL需要添加Class.forName("com.mysql.jdbc.Driver")

    `Class.forName()`方法内部调用了本地方法`forName0`,并传入了一个布尔参数`initialize`,默认值为`true`,表示在加载类之后执行初始化。初始化阶段不仅包括对类变量的赋值,还包括执行静态初始化块,对于父类也是...

    jdbc中class.forname的作用

    在Java JDBC编程中,`Class.forName()` 方法起着至关重要的作用。它的主要任务是动态加载指定的类并执行其实例的静态初始化块。在上下文中,`Class.forName()` 被用来加载数据库驱动,比如MySQL的`...

    jdbc驱动程序实例

    - **Class.forName()**:用于加载特定的JDBC驱动类。 - **DriverManager.getConnection()**:用于建立到数据库的连接。 - **URL**:指定数据库的位置以及连接参数。 - **Connection**:表示与数据库之间的连接。 ##...

    java于各种数据库连接额语句

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@localhost:1521:orcl"; // orcl 为数据库SID String user = "test"; String password = "test"; ...

    Java中通过Class类获取Class对象的方法详解

    通过Class类可以获取Class对象,获取Class对象有三种方式:通过Object类的getClass()方法、通过类名.class获取Class对象、通过Class类中的forName()方法。每种方式都有其特点和应用场景,掌握这些方式可以帮助开发者...

    Classfor的用法

    ### Class.forName 的用法详解 #### 一、概述 `Class.forName` 是 Java 反射 API 中的一个重要方法,主要用于动态加载类。该方法的主要作用是根据提供的全限定类名来加载并返回对应的 `Class` 对象。在 Java 开发...

    浅析使用JDBC操作MySQL需要添加Class.forName(“com.mysql.jdbc.Driver”)

    如果熟悉使用JDBC来连接数据库的同学一定很清楚连接数据库的代码中一定会有依据Class.forName (com.mysql.jdbc.Driver); public static Connection getConnection() throws ClassNotFoundException, SQLException ...

Global site tag (gtag.js) - Google Analytics