Java class.forname()和newinstance
2015-04-15 00:00
411 查看
摘要: <Think in java > P396 关于class.forname()这个静态方法的使用。说是用class.forname()可以用来加载使用的class文件。但是我这里为啥就不行呢?Class.forName("Gum"); 为啥会提示没有找到“Gum”呢
<Think in java >这本书的实例代码。
例子一、
//仔细研究了一下之后,对Class.forname(0的使用方法有了一些了解。例子一中没有找到Gum类的原因是,我在Class.forname("这里面没有指明类文件包文件名称+类名称")。我在例子二中给出了全名称之后就可以了。
例子二、
总结:Class.forname()实际上是获得类的申明。
要想调用类的方法得这样做。使用 Class 的newinstance()方法来实例该类。
<Think in java >这本书的实例代码。
例子一、
package com.yuan.test; //: typeinfo/SweetShop.java //Examination of the way the class loader works. class Candy { static { System.out.println("Loading Candy"); } } class Gum { static { System.out.println("Loading Gum"); } } class Cookie { static { System.out.println("Loading Cookie"); } } public class SweetShop { public static void main(String[] args) { System.out.println("inside main"); new Candy(); System.out.println("After creating Candy"); try { Class.forName("Gum"); } catch (ClassNotFoundException e) { System.out.println("Couldn’t find Gum"); } System.out.println("After Class.forName(\"Gum\")"); new Cookie(); System.out.println("After creating Cookie"); } } //输出结果 inside main Loading Candy After creating Candy Couldn’t find Gum After Class.forName("Gum") Loading Cookie After creating Cookie
//仔细研究了一下之后,对Class.forname(0的使用方法有了一些了解。例子一中没有找到Gum类的原因是,我在Class.forname("这里面没有指明类文件包文件名称+类名称")。我在例子二中给出了全名称之后就可以了。
例子二、
package com.yuan.test; //: typeinfo/SweetShop.java //Examination of the way the class loader works. class Candy { static { System.out.println("Loading Candy"); } } class Gum { static { System.out.println("Loading Gum"); } public void getA(){ System.out.println("调用我哦!"); } } class Cookie { static { System.out.println("Loading Cookie"); } } public class SweetShop { public static void main(String[] args) { System.out.println("inside main"); new Candy(); System.out.println("After creating Candy"); try { Class c=Class.forName("com.yuan.test.Gum"); Object obj=null; System.out.println("123:"+c.getName()); Gum gum=(Gum)c.newInstance(); gum.getA(); } catch (ClassNotFoundException e) { System.out.println("Couldn’t find Gum"); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("After Class.forName(\"Gum\")"); new Cookie(); System.out.println("After creating Cookie"); } }
总结:Class.forname()实际上是获得类的申明。
Class c=Class.forName("com.yuan.test.Gum");
要想调用类的方法得这样做。使用 Class 的newinstance()方法来实例该类。
Object obj=null; Gum gum=(Gum)c.newInstance(); gum.getA();
相关文章推荐
- java Class.forName("") .newInstance();
- Java的jdbc中的Class.forName()和Class.forName().newInstance()
- java基础--Class.forName()、Class.forName().newInstance() 、New 三者区别!
- zz[Java基础]class.forName().newInstance
- java Class.forName("") .newInstance();
- The Difference of Class.forName()、Class.forName().newInstance() and New in Java
- java下Class.forName的作用是什么,为什么要使用它
- Java 类加载机制 ClassLoader Class.forName 内存管理 垃圾回收GC
- Class.forName()、Class.forName().newInstance() 、New 三者区别!
- java类加载器(java.lang.ClassLoader) 与 Class.forName()
- Java学习--Class.forName的作用是什么
- class.forname().newInstance()
- Class.forName()、Class.forName().newInstance() 、New 三者区别
- Class.forName()、Class.forName().newInstance() 、New 三者区别!
- java class.forname
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- class.forname().newInstance() 和 class.forname()
- Class.forName java.lang.reflect.Constructor反射调用有参构造函数和无参构造函数的方法
- java.lang.Class.forName(String name, boolean initialize, ClassLoader loader)方法
- Mybatis:ReflectionException: There is no getter for property named 'productName' in 'class java.lang