展开

关键词

Java- Class.forName() 和 Xxx.class

new Candy(); System.out.println("After creating Candy"); try { Class.forName System.out.println("Could not find Gum"); } System.out.println("After Class.forName Class.forName("Gum") 这个方法是Class类的静态方法,需要用一个包含目标类的文本名(注意拼写和大小写)的String作为输入参数,返回的是Class对象的引用。 public static void main(String[] args) { Class c = null; try{ c = Class.forName Initable.staticFinal2); System.out.println(Initable2.staticNonFinal); Class initable3 = Class.forName

31010

Class.forName()用法详解

主要功能 Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就是说JVM会执行该类的静态代码段 下面,通过解答以下三个问题的来详细讲解下Class.forName()的用法。 二.new 和Class.forName()有什么区别? Class.forName(“”)返回的是类。 Class.forName(“”).newInstance()返回的是object 。 即有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一 些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?

82310
  • 广告
    关闭

    腾讯云精选爆品盛惠抢购

    腾讯云精选爆款云服务器限时体验20元起,云数据库19.9元/年起,还有更多热门云产品满足您的上云需求

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Class.forName和ClassLoader的区别

    一 看名字就知道了,一个是类的创建,一个类加载器 二 再看下Class.forName源码,调用了ClassLoader @CallerSensitive public static Class 给静态字段赋值了"; } public static void main(String[] args) throws ClassNotFoundException { Class.forName ClassLoader.getSystemClassLoader().loadClass("com.lgp.SimpleClass"); } } 预期结果 执行了静态代码块 执行了静态方法 #########分割符########## 四 所以Class.forName 和ClassLoader的区别是 Class.forName加载并初始化了一个类 ClassLoader仅加载了类

    61610

    Class.forName与ClassLoader的区别

    前言 今天看Java代理的一些文章的时候,通过动态代理想到了反射的问题,然后就想到了以前面试的时候被问到的一个面试问题: Class.forName与ClassLoader的区别? 在Java中Class.forName()和ClassLoader都是对类进行加载,我们也知道在Class.forName中会加载静态代码块,但是ClassLoader并不会加载静态代码块。 我们可以查看Class.forName的源码: @CallerSensitive public static Class<? 在进行JDBC连接时,我们通常使用Class.forName去实现。 在Spring中的IOC使用ClassLoader。 以上就是对Class.forName以及ClassLoader的整理!! 来源:https://www.tuicool.com/articles/aQ3M7bn

    15120

    Mysql - Class.forName(com.mysql.cj.jdbc.Driver) 做了什么

    常见的加载Mysql jdbc驱动的代码如下: Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost DriverManager.getConnection(url, username, password); Statement statement = connection.createStatement(); 那么Class.forName ; } } } 如果我们在代码中将Class.forName("com.mysql.cj.jdbc.Driver");替换为DriverManager.registerDriver

    41010

    Class.forName 造成的线程阻塞

    今天在查看服务器时,发现机器上稳定的会有 3 ~ 4 个线程处于阻塞状态,感觉应该是有问题的,仔细排查了一下,最终发现和 Class.forName 有关。 总结 一个小小的Class.forName方法,也会引出不少问题,如果仔细研究,在排查的过程,相信你一定会有所收获。 有兴趣的话可以访问我的博客或者关注我的公众号、头条号,说不定会有意外的惊喜。

    36930

    Class.forName()的作用与使用总结

    例如: if(e.getClass() == Employee.class)... 2、 Class.forName()方法: Class.forName:返回与给定的字符串名称相关联类或接口的 Class.forName是一个静态方法,同样可以用来加载类。 该方法有两种形式:Class.forName(String name, boolean initialize, ClassLoader loader)和 Class.forName(String className 从官方给出的API文档中可以看出: Class.forName(className)实际上是调用Class.forName(className,true, this.getClass().getClassLoader 可以看出,使用Class.forName(className)加载类时则已初始化。 所以Class.forName(className)可以简单的理解为:获得字符串参数中指定的类,并初始化该类。

    2.7K20

    经典面试题-Class.forName()的作用

    为了详细描述,Class.forName()方法,这里使用classLoader.loadClass()进行对比描述 a)Class.forName(String className)使用装载当前类的类装载器来装载制定的类 ,因为class.forName(String name)方法内部调用了Class.forName(className,true,this.getClass().getClassLoader())方法。 c)Class.forName(className)装载的class已经被实例化,classLoader.loadClass().则只是将信息装载给JVM。 d)在JDBC中Class.forName(“com.mysql.jdbc.Driver”),如果换成getClass().getClassLoader().loadClass(“com.mysql.jdbc.Driver

    26730

    Class.forName 和 ClassLoader 到底有啥区别?

    前言 最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来记录一下。 解释 在java中Class.forName()和ClassLoader都可以对类进行加载。 Class.forName()方法实际上也是调用的ClassLoader来实现的。 Class.forName(String className);这个方法的源码是 @CallerSensitive public static Class<? 也可以调用Class.forName(String name, boolean initialize,ClassLoader loader)方法来手动选择在加载类的时候是否要对类进行初始化。

    17050

    Class.forName 和 ClassLoader 到底有啥区别?

    作者 | 纪莫 来源 | https://www.cnblogs.com/jimoer/p/9185662.html 在java中Class.forName()和ClassLoader都可以对类进行加载 Class.forName()方法实际上也是调用的CLassLoader来实现的。 Class.forName(String className);这个方法的源码是 @CallerSensitive public static Class<? 也可以调用Class.forName(String name, boolean initialize,ClassLoader loader)方法来手动选择在加载类的时候是否要对类进行初始化。 而在我们使用JDBC时通常是使用Class.forName()方法来加载数据库连接驱动。这是因为在JDBC规范中明确要求Driver(数据库驱动)类必须向DriverManager注册自己。

    24720

    Class.forName 和 ClassLoader 到底有啥区别?

    作者 | 纪莫 来源 | https://www.cnblogs.com/jimoer/p/9185662.html 在java中Class.forName()和ClassLoader都可以对类进行加载 Class.forName()方法实际上也是调用的CLassLoader来实现的。 Class.forName(String className);这个方法的源码是: @CallerSensitive public static Class<? 也可以调用Class.forName(String name, boolean initialize,ClassLoader loader)方法来手动选择在加载类的时候是否要对类进行初始化。 而在我们使用JDBC时通常是使用Class.forName()方法来加载数据库连接驱动。这是因为在JDBC规范中明确要求Driver(数据库驱动)类必须向DriverManager注册自己。

    15410

    Class.forName 和 ClassLoader 到底有什么区别?

    在 java 中 Class.forName() 和 ClassLoader 都可以对类进行加载。 Class.forName() 方法实际上也是调用的 CLassLoader 来实现的。 Class.forName(String className);这个方法的源码是: ? Class.forName(String name, boolean initialize,ClassLoader loader) 的源码如下: ? 根据运行结果得出 Class.forName 加载类是将类进了初始化,而 ClassLoader 的 loadClass 并没有对类进行初始化,只是把类加载到了虚拟机中。 而在我们使用 JDBC 时通常是使用 Class.forName() 方法来加载数据库连接驱动。

    19710

    Class.forName 和 ClassLoader 到底有什么区别?

    在 java 中 Class.forName() 和 ClassLoader 都可以对类进行加载。 Class.forName() 方法实际上也是调用的 CLassLoader 来实现的。 Class.forName(String className);这个方法的源码是: ? Class.forName(String name, boolean initialize,ClassLoader loader) 的源码如下: ? 而在我们使用 JDBC 时通常是使用 Class.forName() 方法来加载数据库连接驱动。 我们看到 Driver 注册到 DriverManager 中的操作写在了静态代码块中,这就是为什么在写 JDBC 时使用 Class.forName() 的原因了。

    44120

    015 反射中的 Class.forName() 与 ClassLoader.loadClass() 的区别

    Class.forName() 与 ClassLoader.loadClass() 大家都知道是反射用来构造类的方法,但是他们的用法还是有一定区别的。 Class.forName(className) 方法,其实调用的方法是Class.forName(className,true,classloader); 注意看第2个boolean参数,它表示的意思

    32630

    面试官:说说 Class.forName 和 ClassLoader 的区别?

    作者 | 纪莫 dwz.date/eUc 前言 在 Java 中 Class.forName() 和 ClassLoader 都可以对类进行加载。 Class.forName() 方法实际上也是调用的 CLassLoader 来实现的。 Class.forName(String className);这个方法的源码是: ? Class.forName(String name, boolean initialize,ClassLoader loader) 的源码如下: ? 而在我们使用 JDBC 时通常是使用 Class.forName() 方法来加载数据库连接驱动。 我们看到 Driver 注册到 DriverManager 中的操作写在了静态代码块中,这就是为什么在写 JDBC 时使用 Class.forName() 的原因了。

    35920

    在Java的反射中,Class.forName和ClassLoader的区别

    前言 最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来记录一下。 解释 在java中Class.forName()和ClassLoader都可以对类进行加载。 Class.forName()方法实际上也是调用的CLassLoader来实现的。 Class.forName(String className);这个方法的源码是 @CallerSensitive public static Class<? 也可以调用Class.forName(String name, boolean initialize,ClassLoader loader)方法来手动选择在加载类的时候是否要对类进行初始化。

    1.1K20

    在 Java 的反射中,Class.forName 和 ClassLoader 的区别

    前言 最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来记录一下。 解释 在java中Class.forName()和ClassLoader都可以对类进行加载。 Class.forName()方法实际上也是调用的CLassLoader来实现的。 Class.forName(String className);这个方法的源码是 ? Class.forName(String name, boolean initialize,ClassLoader loader)的源码如下: ? 我们看到Driver注册到DriverManager中的操作写在了静态代码块中,这就是为什么在写JDBC时使用Class.forName()的原因了。

    29330

    在 Java 的反射中,Class.forName 和 ClassLoader 的区别

    前言 最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别。当时没有想出来后来自己研究了一下就写下来记录一下。 解释 在java中Class.forName()和ClassLoader都可以对类进行加载。 Class.forName()方法实际上也是调用的CLassLoader来实现的。 Class.forName(String className);这个方法的源码是 ? Class.forName(String name, boolean initialize,ClassLoader loader)的源码如下: ? 我们看到Driver注册到DriverManager中的操作写在了静态代码块中,这就是为什么在写JDBC时使用Class.forName()的原因了。

    15920

    Spring IOC 容器为什么不使用 Class.forName 加载类

    比如,今天我们要学习的Spring IOC 容器为什么不使用 Class.forName 加载类,而是使用 ClassLoader! ? 我们先来看看如果使用 Class.forName 会发生什么! 先创建一个测试类。 ? 调用 Class.forName 其实相当于调用了 Class.forName(className, true, currentLoader), 这个方法的第二个参数表示是否需要初始化类。 源码中设置为 true, 因此 Class.forName 获取到 Class 对象时, 会自动对类进行初始化的。 并且 Class.forName 加载类的 ClassLoader 和调用 Class.forName 所在的类的 ClassLoader 相同。

    53510

    一篇文章吃透:为什么加载数据库驱动要用Class.forName()

    1、Class.forName()和ClassLoader.loadClass()和new XX的区别 Class.forName():将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的 我们看Class.forName源码 @CallerSensitive public static Class forName(String className) ("Foo")} * * * is equivalent to: * * * {@code Class.forName("Foo", true 二、为什么加载数据库驱动要用Class.forName()? 其实JDBC4.0以后(mysql-connector-java 5.1.6之后) + java6以后,不再需要显示调用Class.forName()加载驱动了。

    21410

    相关产品

    • 云服务器

      云服务器

      云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。 腾讯云服务器(CVM)为您提供安全可靠的弹性云计算服务。只需几分钟,您就可以在云端获取和启用云服务器,并实时扩展或缩减云计算资源。云服务器 支持按实际使用的资源计费,可以为您节约计算成本。

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券