class fornameJava加载数据库连接驱动,为什么要用Class.forName()方法?

class forname  时间:2022-02-23  阅读:()

反射中Class.forName和Classloader的区别

Class的装载分了三个阶段,loading,linking和initializing,分别定义在The Java Language Specification的12.2,12.3和12.4。 Class.forName(className) 实际上是调用Class.forName(className, true, this.getClass().getClassLoader())。注意第二个参数,是指Class被loading后是不是必须被初始化。 ClassLoader.loadClass(className)实际上调用的是ClassLoader.loadClass(name, false),第二个参数指出Class是否被link。 区别就出来了。Class.forName(className)装载的class已经被初始化,而ClassLoader.loadClass(className)装载的class还没有被link。 一般情况下,这两个方法效果一样,都能装载Class。但如果程序依赖于Class是否被初始化,就必须用Class.forName(name)了。 例 如,在JDBC编程中,常看到这样的用法,Class.forName(.mysql.jdbc.Driver"),如果换成了 getClass().getClassLoader().loadClass(.mysql.jdbc.Driver"),就不行。

java 中Class.forName();是什么函数

类加载,根据某个类编译之后的class文件的名称,去加载这个类,然后可以调用该类里面的方法函数等

Class.forName

Class.forName("java.lang.String"); 类的全限名 getConnection(url,username,password); url - jdbc:subprotocol:subname 形式的数据库 url user - 数据库用户,连接是为该用户建立的 password - 用户的密码

求问java 中的Class.forName("String");是什么东西?

晕.. 拜托那些没学明白的人 不会就别乱回答别人的问题好么.. 或许我这么写你就明白了.. Class.forName(string className); 该方法的参数是一个字符串类型的参数,这句话的意思是要把传进去的字符串当作一种类型试着加载到内存中,比如 你学Java肯定学过连接数据库的类吧... 最一开始的写法肯定是要把数据库驱动类加载到内存Class.forName(&.microsoft.sqlserver.jdbc.SQLServerDriver");这句话的意思就是说.. 要.microsoft.sqlserver.jdbc.SQLServerDriver这个类型加载到内存中仅此而已.. [原创答案,复制可耻 -- l.a.r]

谁能帮我解释一下Class.forName("oracle.jdbc.driver.OracleDriver");

这个是Java的反射机制 oracle.jdbc.driver.OracleDriver 是一个类的名字 Class.forName("oracle.jdbc.driver.OracleDriver"); //此句是通过字符串来查找类,返回的是一个Class类的对象,这句的作用是让系统加载该类,系统加载同时会自动调用该数据库驱动类的static块完成初始化工作(在这里是注册数据库驱动) lz这个是一个典型的JDBC加载驱动的语句 关于反射 参看/art/3539/20070924/1222147_1.html 以及官方API文档和向导文档 需要更详细的信息,可以给我发消息或者用HI

Class.forName()里面的内容怎么填写呢?

Class.forName(&.mysql.jdbc.Driver"); String url = "jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=utf-8"; String user = ""; String psw = ""; Connection con = DriverManager.getConnection(url,user,psw); 首先,Class.forName(xxxxx)并不是实例化驱动,是返回一个类模板,也就是class对象。这样做的目的是:将驱动类的class文件加载到内存中。

关于Class.forName(driverName).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构造。

class forName("com.microsoft.jdbc.sqlserver.SqlserverDriver");//这句话是什么意思。希望高手讲明白点

显示的加载一个用户要使用的数据库(类)的驱动程(也叫做注册驱动程序,把驱动程序的类加载到JVM中) 以下是不同数据库公司提供的驱动类,请参考下~~ [Class.forName(driver);] //Oracle的: String driver=”oracle.jdbc.driver.OracleDriver”; //MySQL的: String driver=.mysql.odbc.Driver”; //SQL Server的: String driver=.microsoft.jdbc.sqlserver.SQLServer-Driver”;

Java中的getName,class 和forName的区别

没有getName,只有实例化对象.getClass().getName(); 获取class名称。例如: String?name?=?""; name.getClass().getName();Class.forName();是为了获取class的字节码,是映射。例如: Class?clazz?=?Class.forName("java.lang.String"); String?newInstance?=?(String)?clazz.newInstance();

MYsql数据库 jdbc class.forname

你把驱动包加载到项目里去了吗 就是说你的项目里有没有多一项Referenced Libranes 还有你的url好像没有写上mysql数据库的端口号:3306,或者是你自己定义的

Class后面.forName();这个函数找不到,是怎么回事?

语法错了,要写到方法里面, public?class?Test?{ ????public?static?void?main()?{ ????????try?{ ????????????Class.forName("Test"); ????????} ????????catch?(Exception?e)?{ ????????} ????} }

Java中Class.forName和ClassLoader.loadClass的区别

Class.forName(className)装载的class已经被初始化,而ClassLoader.loadClass(className)装载的class还没有被link。 forName支持数组类型,loadClass不支持数组 一般情况下,这两个方法效果一样,都能装载Class。但如果程序依赖于Class是否被初始化,就必须用Class.forName(name)了

java 中的class.forName()是什么意思

class.forName()是运用反射的原理创建对象 通俗地说,平时我们创建对象都是用Studeng s = new Studeng()的方式,而class.forName()也是创建对象的一种方式,等你学了反射就知道了。现在你只要知道class.forName()是创建了一个对象就可以

谁能详细帮我解释一下.class()、getClass()、Class.forName()、getClassLoader()的区别和联系

你好! 有,例如String.class,代表的是调用字节码文件,来获取一个String的类型。 对一楼的回答进行补充。 希望对你有所帮助,望采纳。

关于java中Class.forName() !

Class.forName()是返回一个类 new 是创建一个对象 Class.forName(xx.xx.xx).newInstance()就是获取一个类并创建对象的意思

请问java下Class.forName的作用是什么,为什么要使用它

首先你要明白在java里面任何class都要装载在虚拟机上才能运行。这句话就是装载类用的(和new 不一样,要分清楚)。 至于什么时候用,你可以考虑一下这个问题,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?只有你提到的这个方法了,不过要再加一点。 A a = (A)Class.forName("pacage.A").newInstance(); 这和你 A a = new A(); 是一样的效果。 关于补充的问题 答案是肯定的,jvm会执行静态代码段,你要记住一个概念,静态代码是和class绑定的,class装载成功就表示执行了你的静态代码了。而且以后不会再走这段静态代码了。 你可以编个小程序看看就知道了。。。

请问下Class.forName的作用?为什么要用?

调用该访问返回一个以字符串指定类名的类的对象。 说明:Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。 Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

关于forClass,getClass,forName方法

一个java.lang.Class对象代表了Java应用程序在运行时所加载的类或接口实例,也就是说被加载的类在JVM中以Class的实例存在,Class对象由JVM自动产生。通过Object的getClass()方法来获取每一个对象对应的Class对象,或的Class对象之后可以用Class对象上的方法取得类的信息。 在一些应用程序中,无法事先知道用户将加载什么类,而必须用户指定类名称以加载类,可以用Class的静态方法forName()方法实现动态加载类。forClass()我不知道是做什么的。下面是例子: import java.lang.reflect.*; public class ClassDemo { public static void main(String[] args) { System.out.println("****************getClass()的例子******************* "); String name="john"; //获得name对象的Class实例 Class stringClass=name.getClass(); //下面可以用stringClass实例获取name对象的相关信息,可以看API文档,这里只举两个方法 System.out.println("name对象的类型:"+stringClass.getName()); System.out.println("name对象的父类:"+stringClass.getSuperclass().getName()); System.out.println(" ****************forName()的例子******************* "); //举forName()的例子 //动态加载java.util.ArrayList类 //得到类的Class实例后利用Class的方法取得类相关信息 //里面有好多方法我就不解释了,你可以参考API文档 try { Class c=Class.forName("java.util.ArrayList"); int mod=c.getModifiers(); System.out.print(Modifier.toString(mod)); if(Modifier.isInterface(mod)) System.out.print(" interface"); else System.out.print(" class "); System.out.println(c.getName()+"{"); System.out.println(" //********成员变量**********"); Field[] field=c.getDeclaredFields(); for(Field f:field) { System.out.print(" "+Modifier.toString(f.getModifiers())); System.out.print(" "+f.getType().getName()); System.out.println(" "+f.getName()+";"); } System.out.println(" //********构造方法**********"); Constructor[] constructor=c.getDeclaredConstructors(); for(Constructor con:constructor) { System.out.print(" "+Modifier.toString(con.getModifiers())); System.out.println(" "+con.getName()+"();"); } System.out.println(" //*********成员方法*************"); Method[] method=c.getDeclaredMethods(); for(Method mhd:method) { System.out.print(" "+Modifier.toString((mhd.getModifiers()))); System.out.print(" "+mhd.getReturnType().getName()); System.out.println(" "+mhd.getName()+"()"); } System.out.println("}"); } catch(Exception e) { e.printStackTrace(); } } }

24. Class的forName方法的作用是( ) A、注册类名 B、注册数据库驱动程序 C、创建类

我怎么发现都说的不准,forName的作用主要就是讲硬盘上的java类给加载到内存中。

用class.forName()创建对象为什么一定要强制转换

不转换的话就是一个class类的对象 注意是class类~一个普通类也是继承Object类的类

java 谁来帮我讲解下Class.forname()方法和Class.forname().newInstance()方法

这是有关反射的,如下解释: String str = "T"; Class c = Class.forName(str); //获取以T为类名的类 Object o = c.newInstance(); //实例化c

JAVA反射中通过Class.forname()如何带参数的方法怎么赋值和调用呀?

要调用带参数的方法invoke方法

举个例子:

; import java.lang.reflect.Method; public class InvokeMethod {    public static void main(String args[]){     try     {      //动态加载Student类      Class student = Class.forName(.Student");      //获取Student类名称为printInfo的方法      Method method1 = student.getMethod("printInfo");      //调用printInfo方法      method1.invoke(student.newInstance());      //获取Student类名称为printInfo的方法,String.class是方法的参数类型      Method method2 = student.getMethod("printAddress",String.class);      //调用printAddress方法,其中HK是为方法传递一个参数值      method2.invoke(student.newInstance(),"hello关知红");     }catch(Exception e)     {      e.printStackTrace();     }    } }

求class.forname的用法。。(java)

public static Class<?> forName(String className) throws ClassNotFoundException 返回与带有给定字符串名的类或接口相关联的 Class 对象。调用此方法等效于: Class.forName(className, true, currentLoader) 其中 currentLoader 表示当前类的定义类加载器。 例如,以下代码片段返回命名为 java.lang.Thread 的类的运行时 Class 描述符。 Class t = Class.forName("java.lang.Thread") 调用 forName("X") 将导致命名为 X 的类被初始化。 参数: className - 所需类的完全限定名。 返回: 具有指定名的类的 Class 对象。 抛出: LinkageError - 如果链接失败 ExceptionInInitializerError - 如果此方法所激发的初始化失败 ClassNotFoundException - 如果无法定位该类 以上是jdk文档的说明 返回的是--- 带有给定字符串名的类或接口相关联的 Class 对象--- 相关联的Class对象。。即这个Class对象里包含了这个类活接口的信息。。比如方法,属性等。。 可以用来加载类。。因为---调用此方法等效于: Class.forName(className, true, currentLoader) 其中 currentLoader 表示当前类的定义类加载器。 ---- 即调用这个方法的话currentLoader这个类加载器就会加载这个类。。 用得最多的就是反射了。。即你只需要告诉我类名我就能调用你的方法。。设置你的属性。。 所以我可以在你的类还没写的时候就调用你的类的方法--很抽象吧。。 因为我将类名设成我方法的参数或者是你的类的对应的Class对象设为参数。。 这样我可以通过它获得方法。。然后调用。。你用我写的东西的时候把类名或者是对应的Class对象传给我就是了。。

java 连接数据库中的class.forname()在数据库中起什么作用,是给ManagerDriver类提供驱动器的查找范围吗

Class.forName("String");这个String对象就是你数据库的驱动,这个代码的意思是加载你数据库的驱动,这样你在下面的程序在才能给创建对于数据库的连接,对数据库进行一系列的操作

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")的含义

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") 这个是反射机制,就是来调用jdbc-odbc驱动的,这个不是你安装的,而是你一个jar包, 而sun.jdbc.odbc.JdbcOdbcDriver就是jar包里面的一个类, Class.forName()就是用来调用JdbcOdbcDriver,直白的就是加载和注册一个驱动程序。 驱动可以看作是接口的另外一种说法,比如你的手机驱动,光盘驱动,其实这些驱动都是你通信的接口,只是这里叫做驱动而已。

JDBC操作中为什么Class.forName()后面的 newInstance()不写也可以

static Class<?> forName(String className) 返回与带有给定字符串名的类或接口相关联的 Class 对象。
T newInstance() 创建此 Class 对象所表示的类的一个新实例。

简述一下Class.forName的作用?

类是程序的一部分,每个类都有一个Class对象,即每当编写并且编译了一个新类,就会产生一个Class对象,在运行时,当我们想生成这个类的对象时,运行这个程序的jvm会首先检查这个类的Class对象是否已经加载,如未加载,jvm就会根据类名查找 .class文件,并将其载入. 而Class.forName("A")不仅产生class对象而且有个副作用:如果类A没有被加载,就加载它!

百度里面找到的,不明白,术业有专攻啊!

/%C7%A6%B1%CA/blog/item/6b0d5343e52266179213c668.html

上面这个地址里有啊,百度里也可以搜到的!你可以了解一下!我是不明白!

Java加载数据库连接驱动,为什么要用Class.forName()方法?

目的是为了实例化对象。 Class.forName("")返回的是类 Class.forName("").newInstance()返回的是object 刚才提到,Class.forName("");的作用是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码 段。而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的 Driver类的代码都必须类似如下: public class MyJDBCDriver implements Driver {static {DriverManager.registerDriver(new MyJDBCDriver());}}既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。 we just want to load the driver to jvm only, but not need to user the instance of driver, so call Class.forName(xxx.xx.xx) is enough, if you call Class.forName(xxx.xx.xx).newInstance(), the result will same as calling Class.forName(xxx.xx.xx), because Class.forName(xxx.xx.xx).newInstance() will load driver first, and then create instance, but the e you will never use in usual, so you need not to create it. 总结:jdbc数据库驱动程序最终的目的,是为了程序员能拿到数据库连接,而进行jdbc规范的数据库操作。拿到连接的过程是不需要你自己来实例化驱动程序的,而是通过 DriverManger.getConnection(string str); 。因此一般情况下,对于程序员来说,除非特别需求,是不会自己去实例化一个数据库驱动使用里面的方法的。

  • class fornameJava加载数据库连接驱动,为什么要用Class.forName()方法?相关文档

RepriseHosting:$27.97/月-L5640,16G内存,1TB硬盘,10TB月流量,西雅图机房

RepriseHosting是成立于2012年的国外主机商,提供独立服务器租用和VPS主机等产品,数据中心在美国西雅图和拉斯维加斯机房。商家提供的独立服务器以较低的价格为主,目前针对西雅图机房部分独立服务器提供的优惠仍然有效,除了价格折扣外,还免费升级内存和带宽,商家支持使用支付宝或者PayPal、信用卡等付款方式。配置一 $27.97/月CPU:Intel Xeon L5640内存:16GB(原...

香港 1核1G 29元/月 美国1核 2G 36元/月 快云科技

快云科技: 11.11钜惠 美国云机2H5G年付148仅有40台,云服务器全场7折,香港云服务器年付388仅不到五折 公司介绍:快云科技是成立于2020年的新进主机商,持有IDC/ICP/ISP等证件资质齐全主营产品有:香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机官网地址:www.345idc.com活动截止日期为2021年11月13日此次促销活动提供...

HostKvm:香港国际/韩国KVM夏季7折,2G内存套餐月付5.95美元起

HostKvm是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。目前商家发布了夏季特别促销活动,针对香港国际/韩国机房VPS主机提供7折优惠码,其他机房全场8折,优惠后2GB内存套餐月付5.95美元起。下面分别列出几款主机套餐配置信息。套餐:韩国KR...

class forname为你推荐
settimerSetTimer()和OnTimer()函数的作用范围rdlDVD±RW/±RDL/RAM 具体什么意思representspublic class是什么意思qq注册账号用QQ注册有几种方法?vipjrvipjr怎么样?有真实体验的来说一下radius认证电信或网通的RADIUS认证都记录些什么?谁能说说ISP的宽带帐号检查流程waves插件MuseScore vst插件怎么安装民生电商民生电商招的仓库操作工是干什么的ruby语言Ruby是一种什么样的语言,主要用来做什么,现在有一家公司让我从java转ruby,我很犹豫?layoutsubviews如何设置plus.nativeui.toast的样式
域名城 服务器租用托管 高防服务器租用qy 美国加州vps 万网免费域名 已备案域名出售 美国主机排名 仿牌空间 美国php主机 http500内部服务器错误 java空间 godaddy域名证书 qingyun 183是联通还是移动 gtt 789电视剧 最漂亮的qq空间 数据库空间 阿里云邮箱登陆 测速电信 更多