java中Class.forName的含义
来源:优易学  2011-12-16 12:59:40   【优易学:中国教育考试门户网】   资料下载   IT书店
  Class.forName(xxx.xx.xx) 返回的是一个类, .newInstance() 后才创建一个对象 Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段
  Class aClass = Class.forName(xxx.xx.xx);
  Object anInstance = aClass.newInstance();
  Class.forName("").newInstance()返回的是object
  but there is some limit for this method to create instance
  that is your class constructor should no contain parameters, and you should cast the instance manually.
  Class Driver{
  protected static Driver current;
  public static Driver getDriver(){
  return current;
  }
  }
  Class MyDriver extends Driver{
  static{
  Driver.current=new MyDriver();
  }
  MyDriver(){}
  }
  用时:
  Class.forName("MyDriver");
  Driver d=Driver.getDriver();
  有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?
  Class.forName(xxx.xx.xx) 返回的是一个类,
  .newInstance() 后才创建一个对象
  Class.forName(xxx.xx.xx);的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段
  在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的Driver类的代码都必须类似如下:
  public class MyJDBCDriver implements Driver {
  static {
  DriverManager.registerDriver(new MyJDBCDriver());
  }
  }
  所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了
  下面给一个例子:Class的最大作用就是实现了动态加载类,为多态提供了很好的帮助。
  class A
  {
  void aa()
  {
  System.out.println ("A里的");
  }
  }
  class B extends A
  {
  void aa()
  {
  System.out.println ("B里的");
  }
  }
  class C extends A
  {
  void aa()
  {
  System.out.println ("C里的");
  }
  }
  public class ClassDemo
  {
  public static void main(String[] args)
  {
  ClassDemo t=new ClassDemo();
  t.show("C");
  }
  void show(String name)
  {
  try
  {
  A show=(A)Class.forName(name).newInstance();
  show.aa();
  }
  catch(Exception e)
  {
  System.out.println (e);
  }
  }
  }

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训