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()方法?相关文档

优林70/月,西南高防地区最低70/月

优林怎么样?优林好不好?优林 是一家国人VPS主机商,成立于2016年,主营国内外服务器产品。云服务器基于hyper-v和kvm虚拟架构,国内速度还不错。今天优林给我们带来促销的是国内西南地区高防云服务器!全部是独享带宽!续费同价!官方网站:https://www.idc857.com​地区CPU内存硬盘流量带宽防御价格购买地址德阳高防4核4g50G无限流量10M100G70元/月点击购买德阳高防...

ftlcloud9元/月,美国云服务器,1G内存/1核/20g硬盘/10M带宽不限/10G防御

ftlcloud(超云)目前正在搞暑假促销,美国圣何塞数据中心的云服务器低至9元/月,系统盘与数据盘分离,支持Windows和Linux,免费防御CC攻击,自带10Gbps的DDoS防御。FTL-超云服务器的主要特色:稳定、安全、弹性、高性能的云端计算服务,快速部署,并且可根据业务需要扩展计算能力,按需付费,节约成本,提高资源的有效利用率。活动地址:https://www.ftlcloud.com...

pacificrack:$12/年-1G内存/1核/20gSSD/500g流量/1Gbps带宽

pacificrack在最新的7月促销里面增加了2个更加便宜的,一个月付1.5美元,一个年付12美元,带宽都是1Gbps。整个系列都是PR-M,也就是魔方的后台管理。2G内存起步的支持Windows 7、10、Server 2003\2008\2012\2016\2019以及常规版本的Linux!官方网站:https://pacificrack.com支持PayPal、支付宝等方式付款7月秒杀VP...

class forname为你推荐
pcbetawindows7 7127下载showwindowvfp中菜单生成不能运行,提示说要把showwindow属性设为2,不懂求解知识库管理系统知识库管理软件与档案管理软件有什么区别溢出隐藏关于CSS样式的问题,怎么可以让div的内容自动换行,溢出隐藏,还要加省略号?最开放的浏览器我国最出名的十种浏览器备忘录模式手机如何设置备忘录提醒jdk6JDK6和JDK7两个版本有什么区别,初学者选那个好?天融信防火墙笔记本怎么登陆天融信防火墙索引超出了数组界限求助大神什么叫索引超出了数组界限spawning急救!编好C++程序后(确认无误),再编译时总出现error spawning 是什么意思?是不是系统出了问题
上海域名注册 广东服务器租用 大庆服务器租用 国外vps租用 免费申请域名 fdcservers burstnet 域名优惠码 http500内部服务器错误 云鼎网络 softbank邮箱 200g硬盘 百度云1t 免费网页申请 www789 美国凤凰城 smtp服务器地址 石家庄服务器托管 德隆中文网 徐州电信 更多