找不到你指定的类,首先检查是不是你在class.forName()中的参数写错了,比如类名/类的路径写错。
再检查你要获取的类是否在其他jar包中,如果是,根据Jar包的路径获取URLClassLoader,通过获取到URLClassLoader获取类。
forname方法?JVM规定了几种必须对类执行初始化的场景,class.forName就是其中一种,它会让jvm对指定的类执行加载、连接、初始化操作,具体动作包括:
1.jvm会查找指定路径类的class文件,然后将class文件读入内存,为该类生成一个class对象作为访问类型信息的入口(类型信息是该类的class文件转换成的数据结构,存储在方法区,class对象就是用于访问这个数据结构的,我们可以通过getClass()方法获取class对象,class对象提供的反射功能其实就是基于该数据结构实现的)。
2.会为类的类变量分配空间并赋值、执行静态代码块中的内容,也就是对类进行初始化,比如我们熟悉的Class.forName("com.mysql.jdbc.Driver"),就是告诉jvm加载并初始化Driver类,为啥要加载它,自然是因为后续的JDBC流程中要用到它,大家可以进到Driver类中查看其源码,核心内容除了其父类的一些静态变量外,就是Driver类本身的静态代码块了,其中执行了DriverManager.registerDriver(new Driver()),这样一句代码,顾名思义,会创建并注册一个驱动对象,然后就可以拿来建立数据库连接了。
如果对加载、连接、初始化的过程感兴趣,大家可以去看下我的博文"JVM类加载过程详解"。
sqlServer版本是什么
2000加载驱动和URL的语句是。
String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";。
String dbURL = "jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=XXX";。
SQL Server 2005 中加载驱动和URL的语句是。
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";。
String dbURL = "jdbc:sqlserver://localhost:1433; DatabaseName=XXX";。
如果写法错误将会找不到驱动。
先写成类文件保存.class 再用映射 classforname().希望能帮到你。
这个是反射+多态。
Timeneed cm这个你懂吧?
Class.forName( )静态方法的目的是为了动态加载类。
Class.forName("")返回的是类。
Class.forName("").newInstance()返回的是object。
API如下:
Class的forName方法。
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 的类被初始化。
Class的newInstance方法。
public T newInstance()。
throws InstantiationException,。
IllegalAccessException创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化这个类。
注意,此方法传播 null 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。 Constructor.newInstance 方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException 中,从而避免了这一问题。
返回:
此对象所表示的类的一个新分配的实例。