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           

 

posted @ 2017-11-14 20:28  咕噜噜zmj  阅读(303)  评论(0编辑  收藏  举报