`
liyx985
  • 浏览: 215093 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

连接数据库驱动时的.newInstance()

 
阅读更多
   在连接数据库驱动时有这样一句话,
   Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
.newInstance()一般情况加不加没什么区别,不过一般都加上,这是主动将driverName载入虚拟机,成为运行于'全局'的实例,
如果只是driverName dn = new driverName();
那只有在调用此类时才会装载入虚拟机,运行完后可能会被虚拟机垃圾回收



new与newInstance()的区别?
在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?它们的 区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。那么为什么会有两种创建对象方式?这主要考虑到软件的可伸缩、可扩展和可重用 等软件设计思想。

  Java中工厂模式经常使用newInstance()方法来创建对象,因此从为什么要使用工厂模式上可以找到具体答案。 例如:

   class c = Class.forName(“Example”); 
  factory = (ExampleInterface)c.newInstance(); 

  其中ExampleInterface是Example的接口,可以写成如下形式:

   String className = "Example"; 
  class c = Class.forName(className); 

  factory = (ExampleInterface)c.newInstance(); 

  进一步可以写成如下形式:

   String className = readfromXMlConfig; //从xml 配置文件中获得字符串 
  class c = Class.forName(className); 

  factory = (ExampleInterface)c.newInstance(); 

  上面代码已经不存在Example的类名称,它的优点是,无论Example类怎么变化,上述代码不变,甚至可以更换Example的兄弟类 Example2 , Example3 , Example4……,只要他们继承ExampleInterface就可以。

  从 JVM的角度看,我们使用关键字new创建一个类的时候,这个类可以没有被加载。但是使用newInstance()方法的时候,就必须保证:1、这个类 已经加载; 2、这个类已经连接了。而完成上面两个步骤的正是Class的静态方法forName()所完成的,这个静态方法调用了启动类加载器,即加载java API的那个加载器。

  现在可以看出,newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法 加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。

  最后用最简单的描述来区分new关键字和newInstance()方法的区别:

  newInstance: 弱类型。低效率。只能调用无参构造。

  new: 强类型。相对高效。能调用任何public构造。
分享到:
评论

相关推荐

    java连接数据库字符串

    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); //Sql Server7.0/2000数据库 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); //DB2数据库 Class....

    jdbc笔记整理 sql

    将数据库的 JDBC 驱动加载到 classpath 中,在基于 JAVAEE 的 WEB 应用库产品的 JDBC 驱动复制到 WEB-INF/lib 下 . 加载 JDBC 驱动,并将其注册到 DriverManager 中,下面是一些主流数 //Oracle8/8i/9iO 数据库 ...

    Javabean封装数据库

    //加载数据库驱动 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); //数据库连接url String url = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; //数据库...

    access jar驱动连接数据库

    access jar驱动连接数据库

    sqljdbc jsp连接数据库驱动

    直接导入包使用即可,代码如下,详细代码在压缩包里 try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance

    java数据库连接详细

    Class.forName(Driver).new Instance(); Connection con=DriverManager.getConnection(URL,Username,Password); Microsoft SQL Server 2.0驱动(3个jar的那个): String Driver=...

    Access_JDBC30.jar --Java JDK1.8实现与Access数据库连接

    Java写了一个连接Access数据库的桌面程序,百度很长时间发现jdk1.8没有rt.jar,没法通过第一种方式jdbc:odbc方式连接access数据库,可以通过第四种方式驱动直连access。 实现步骤①外部jar包(Access_JDBC30.jar)导入...

    jsp连接数据库大全

    一定将jdbc的驱动程序放到服务器的类路径里,然后要在数据库里建一个表test,有两个字段比如为test1,test2,可以用下面SQL建 create table test(test1 varchar(20),test2 varchar(20) 然后向这个表写入一条测试...

    jsp数据库连接jtds使用和java环境变量设置

    Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance(); String sConn="jdbc:jtds:sqlserver://localhost:1433/ch03"; String user = "sa"; String password = "123"; conn = DriverManager.get...

    连接sql数据库的jdbc类

    // 通过构造方法加载数据库驱动 static { try { Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance(); } catch (Exception ex) { System.out.println("数据库加载失败"); } } // ...

    各种数据库的连接和指导

    MySQL: ... //驱动程序 String URL="jdbc:mysql://localhost:3306/db_name"; //连接的URL,db_name为... Class.forName(Driver).new Instance(); Connection con=DriverManager.getConnection(URL,Username,Password);

    各种JDBC连接数据库的常用代码

    MySQL: ... //驱动程序 String URL="jdbc:mysql://localhost:3306/db_name"?useUnicode=true&characterEncoding=UTF-8; //连接的URL,db_name为数据库名,注意修改编码... Class.forName(Driver).new Instance();

    JAVA连接FileMaker完整工程

    包函FileMaker数据库Java连接驱动 修改工程中的FileMaker安装地址就 可以用JAVA操作FileMaker 数据库 Driver d = (Driver)Class.forName("com.filemaker.jdbc.Driver").newInstance(); con = DriverManager.get...

    SQL-JDBC驱动

     Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();  System.out.println("数据库驱动程序注册成功!");  String url ="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=...

    JDBC详解HTML-JDBC.pp

    1、JDBC(Java Database Connection):java连接数据库统一接口API,底层主要通过直接的JDBC驱动和 JDBC-ODBC桥驱动实现与数据库的连接。 1>.JDBC驱动程序类型: <1>.JDBC-ODBC桥加ODBC驱动程序:需要ODBC驱动,适合...

    jdbc连接代码

    // 定义连接数据库对象conn Connection conn = null; // 定义执行sql语句对象stmt Statement stmt = null; //定义结果集对象rs,用来保存查询的结果 ResultSet rs = null; try { // 通过反射...

    Java数据库查询结果的输出

    Class.forName(driver).newInstance();  注册SybDriver类。 DriverManager.registerDriver(sybdriver);  取得连接(SybConnection)对象引用。 user="sa"; password=""; url="jdbc:sybase:Tds:202.117.203....

    jsp图书管理系统,一个很好的jsp图书管理系统网站,sql2000数据库

    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); } catch (Exception e) { e.printStackTrace(); System.out.println("加载数据库驱动失败!"); } } /* 创建...

    java程序是怎么操作数据库的,可以以常用据库为例,求详细解答,最好能举例。

    数据库驱动装了吗(我使用的是SQLserver)?你该没有使用Linux吧?虽然java支持Linux,但是老兄我可没有使用Linux哟(这同JAVA的Write Once ,Run Anywhere没有关系),由于使用了运行于Win下面的ODBC,我建议你看看这...

    jsp 用内置对象编写的留言板

    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();//装载驱动 String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test";//建立连接字符串 Connection conn=...

Global site tag (gtag.js) - Google Analytics