zoukankan      html  css  js  c++  java
  • 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           

  • 相关阅读:
    Jersey的异常处理
    REST响应处理
    jersey REST的接口简述
    Firebird 同一字段的多行合并为一行
    Firebird/InterBase内置函数使用说明
    发布FireBird数据库所需要DLL文件
    unidac连接FireBird数据库
    打开与关闭Linux防火墙
    Linux FTP 命令
    Linux 命令修改系统时间
  • 原文地址:https://www.cnblogs.com/java-zmj/p/7834474.html
Copyright © 2011-2022 走看看