zoukankan      html  css  js  c++  java
  • java中class.forName和classLoader加载类的区分

       java中class.forName和classLoader都可用来对类进行加载。前者除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块。而classLoader只干一件事情,就是将.class文件加载到jvm中,不会执行static中的内容,只有在newInstance才会去执行static块(网上有很多文章说,static块在类第一次被加载是执行,是错误的,比如这个人的博客:https://yq.aliyun.com/articles/58333)。

    我们可以通过一个小例子来验证一下:

    class MyClass1 {
        static {//静态块
            System.out.println("static block ");
        }
    }
    public class Main {
    
        Class[] classArray = {
                MyClass1.class//这样引用该类,必然需要将该类加载到虚拟机中
        };
        public static void main(String[] args){
            System.out.println("hello word");
        }
    
    }

    执行结果:并没有输出" static bolck"

    Class.forName(name, initialize, loader)带参函数也可控制是否加载static块。并且只有调用了newInstance()方法采用调用构造函数,创建类的对象 。比如:

    Static Class forName(String name, boolean initialize, ClassLoader loader)

    initialize 设定为 false,这样在加载类时并不会立即运行静态区块,而会在使用类建立对象时才运行静态区块。

    其实当你调用Class.forName("classname")的时候相当于:

    Class.forName("classname",true,this.getClass().getClassLoader());

      什么情况下使用class.forname?

      在一些应用中,无法事先知道使用者将加载什么类,而必须让使用者指定类名称以加载类,可以使用 Class 的静态 forName() 方法实现动态加载类。下面的范例让你可以指定类名称来获得类的相关信息。例如我们最熟悉的数据库驱动就是通过显示的class.forname来夹在数据库驱动类的,因为jvm启动的时候根本不知道你需要加在mysql的驱动包还是sqlserver的数据库驱动包。

    /* 连接mysql 时装载的驱动类以及连接字符串 */
    Class.forName(“com.mysql.jdbc.Driver”);//1
    DriverManager.getConnection(“jdbc:mysql://localhost:3306/test”,”root”,”123”);//2
    /* 连接SQLServer2005 时装载的驱动类以及连接字符串 */
    Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
    DriverManager.getConnection(“jdbc:sqlserver://localhost:1433;databaseName=pubs”,”sa”, ””);
    

     引用:http://blog.csdn.net/u011202334/article/details/51497998

        http://blog.csdn.net/berber78/article/details/46472789

  • 相关阅读:
    如何查看python的当前版本号
    Android数据库程序开发必备工具SqliteDev 狼人:
    Android四种Activity的加载模式 狼人:
    20+ 个很棒的 jQuery 文件上传插件或教程(此文值得“推荐”和“收藏”) 狼人:
    艾伟:10分钟去除天天团购系统版权 狼人:
    WIN7,server2008 IIS 伪静态 不能显示特殊图片 加号 减号 “+”,""号的图片需要转义才可以显示 狼人:
    近百余款最新HTML5应用案例给大伙儿共享了 狼人:
    shopex李钟伟:独立电子商务发展与网络购物 狼人:
    《天将客户关系管理系统》 狼人:
    Shopex V4.8.4 V4.8.5 后台拿Shell 0Days 狼人:
  • 原文地址:https://www.cnblogs.com/guazi/p/6491378.html
Copyright © 2011-2022 走看看