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           

  • 相关阅读:
    eslint 的 env 配置是干嘛使的?
    cookie httpOnly 打勾
    如何定制 antd 的样式(theme)
    剑指 Offer 66. 构建乘积数组
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 62. 圆圈中最后剩下的数字
    剑指 Offer 61. 扑克牌中的顺子
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/java-zmj/p/7834474.html
Copyright © 2011-2022 走看看