zoukankan      html  css  js  c++  java
  • 反射初悟

    1.为什么要学习反射

      不要为了学习反射而学习反射,反射只是创建对象的另一种方式

    创建对象的几种方式:new 反射  clone  流(webservice/webscoket)

    2.下面写了一个示例,模拟框架spring的bean工厂创建对象,调用方法

      反射在框架中时常见的,虽然重要,但是不要被它给迷惑了,戳穿了,

    也就是那么一回事。

      记住:反射只是创建对象的另一种方式而已

     1 package com.rui.test;
     2 
     3 public class Person {
     4 
     5     private String name;
     6     private Integer age;
     7     
     8     public Person(){}
     9     public Person(String name,Integer age){
    10         this.name = name;
    11         this.age = age;
    12     }
    13     
    14     public void study(){
    15         System.out.println(this.name+"在"+this.age+"小学毕业");
    16     }
    17 }


     1 package com.rui.test;
     2 import java.lang.reflect.Constructor;
     3 import java.lang.reflect.Method;
     4 
     5 import org.junit.Test;
     6 
     7 /**
     8  * 
     9  * 反射测试
    10  * @author poseidon
    11  *
    12  */
    13 public class RecflectDemo {
    14 
    15     @Test
    16     public void testPerson() throws Exception {
    17         //创建对象
    18         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    19         Class clz = classLoader.loadClass("com.rui.test.Person");
    20         //解析构造函数
    21         Constructor[] constructors = clz.getConstructors();
    22         Person person = (Person)constructors[1].newInstance("华罗庚",12);
    23         //获得方法并调用
    24         Method method = clz.getMethod("study");
    25         method.invoke(person);
    26     }
    27     
    28     /**
    29      * 封装反射创建对象的方法 
    30      * @param packageName
    31      * @param args
    32      * @return
    33      */
    34     public static<T> T objectNewInstance(String packageName,Object...args){
    35         try {
    36             ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
    37             Class clz = classLoader.loadClass(packageName);
    38             T t = (T)clz.newInstance();
    39             return t;
    40         } catch (Exception e) {
    41             e.printStackTrace();
    42             return null;
    43         }
    44     }
    45 }

    执行后的结果:华罗庚在12小学毕业

  • 相关阅读:
    洛谷P3763 [TJOI2017]DNA(后缀数组 RMQ)
    树莓派在身份证件核验领域应用
    Linux suse x86_64 环境上部署Hadoop启动失败原因分析
    用Spring Data JPA 基于内存存储pojo的简单案例
    短信发送AZDG加密算法
    【玩转Ubuntu】09. Ubuntu上安装apktool
    java遍历Map时remove删除元素
    wust 1061 链表的合并
    干货:yii日志功能详解
    xcode解决问题dyld: Library not loaded
  • 原文地址:https://www.cnblogs.com/sun-rain/p/4887744.html
Copyright © 2011-2022 走看看