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

A2Hosting三年付$1.99/月,庆祝18周年/WordPress共享主机最高优惠81%/100GB SSD空间/无限流量

A2Hosting主机,A2Hosting怎么样?A2Hosting是UK2集团下属公司,成立于2003年的老牌国外主机商,产品包括虚拟主机、VPS和独立服务器等,数据中心提供包括美国、新加坡softlayer和荷兰三个地区机房。A2Hosting在国外是一家非常大非常有名气的终合型主机商,拥有几百万的客户,非常值得信赖,国外主机论坛对它家的虚拟主机评价非常不错,当前,A2Hosting主机庆祝1...

digital-vm:VPS低至$4/月,服务器$80/月,10Gbps超大带宽,不限流量,机房可选:日本新加坡美国英国西班牙荷兰挪威丹麦

digital-vm,这家注册在罗马尼亚的公司在国内应该有不少人比较熟悉了,主要提供VPS业务,最高10Gbps带宽,还不限制流量,而且还有日本、新加坡、美国洛杉矶、英国、西班牙、荷兰、挪威、丹麦这些可选数据中心。2020年,digital-vm新增了“独立服务器”业务,暂时只限“日本”、“新加坡”机房,最高也是支持10Gbps带宽... 官方网站:https://digital-vm.co...

触碰云高性价20.8元/月,香港云服务器,美国cn2/香港cn2线路,4核4G15M仅115.2元/月起

触碰云怎么样?触碰云是一家成立于2019年的商家。触碰云主营香港/美国 VPS服务器、独立服务器以及免备案CDN。采用的是kvm虚拟构架,硬盘Raid10,Cn2线路,去程电信CN2、移动联通直连,回程三网CN2。最低1核1G带宽1M仅20.8元/月,不过这里推荐香港4核4G15M,香港cn2 gia线路云服务器,仅115.2元/月起,性价比还是不错的。点击进入:触碰云官方网站地址触碰云优惠码:优...

class forname为你推荐
科来网络分析系统谁会用最新版的科来网络分析系统破解星空极速帐号和密码``!!!急急急```!!知识库管理系统知识库管理软件与档案管理软件有什么区别tvosTVOS智能电视操作系统如何越狱备忘录模式为什么我的华为手机界面总是有个框框在备忘录上面色库石伟伟怎么写啊faq是什么意思fans是什么意思?弹幕网站视频弹幕网站推荐清除电脑垃圾怎样清除电脑里的垃圾国际加速世界经济全球化加速发展的表现有哪些?在全球化趋势加强的过程中,人类共同面临的问题有哪些?图片存储如何将图片保存下来
域名注册信息查询 欧洲免费vps 免费域名解析 vps.net mach 174.127.195.202 css样式大全 最好看的qq空间 创梦 hinet 东莞数据中心 网络空间租赁 吉林铁通 腾讯总部在哪 1元域名 网站加速软件 沈阳主机托管 中国电信测速网站 日本代理ip 江苏徐州移动 更多