Tomcat底层通过全类名创建对象的实现
示例:
1 //com.neuedu.baier.entity.User为User类的全类名 2 //要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段 3 Class<?> user=Class.forName("com.neuedu.baier.entity.User"); 4 //调用Class下的newInstance( )静态方法来实例化对象,以便操作 5 Object object = user.newInstance(); 6 //getMethod获取的是类的所有共有方法,,下面代码表示获取setName方法,参数为String 7 Method method = user.getMethod("setName", String.class); 8 //调用获取的setName方法 9 method.invoke(object, "张三"); 10 11 //获取getName方法 12 Method method2 = user.getMethod("getName"); 13 //调用getName方法,参数表示调用的对象 14 Object name = method2.invoke(object); 15 System.out.println(name);
1、Class.forName(xxx.xx.xx)返回的是一个类Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。
2、Class.forName(“”)返回的是类。Class.forName(“”).newInstance()返回的是object
3、new与newInstance( )的区别:
newInstance( )是一个方法,而new是一个关键字
Class下的newInstance()的使用有局限,因为它生成对象只能调用无参的构造函数,而使用 new关键字生成对象没有这个限制
newInstance(): 弱类型,低效率,只能调用无参构造。new: 强类型,相对高效,能调用任何public构造
4、newInstance()实际上是把new这个方式分解为两步,即首先调用Class加载方法加载某个类,然后实例化。 这样分步的好处是显而易见的。我们可以在调用class的静态加载方法forName时获得更好的灵活性,提供给了一种降耦的手段。
几个快捷键:
1、方法返回值:在方法后,按ctrl+1,添加与方法返回类型相同的变量
2、全类名复制:点开该类的java文件箭头,在class文件上右键—>Copy Qualified Name