zoukankan      html  css  js  c++  java
  • Java反射总结

    一. 获取Class对象的3种方法:

    1. Class.forName("");例如:Class.forName("java.lang.String");

    2. Class.class;例如:String.class;这种方法需要有类

    3. 对象.getClass();例如:String str = new String(); str.getClass;这种方法需要有对象

    二. 反射生成对象方法:

    1. 先创建Class对象,在通过Class对象的newInstance()方法直接生成对象即可。这种方法生成的对象只能是不带参数的构造方法;

    Class<?> clz = String.class; Object obj = clz.newInstance();

    2. 先创建Class对象,在获取对象的Constructor对象,在通过constructor对象的newInstance()方法;

    Class<?> clz = Customer.class;

    Constructor con = clz.getDeclaredConstructor(new Class[] {String.class, int.class});

    Object obj = con.newInstance(new Object[]{"Hello", 10});

    getDeclaredMethod*()获取的是类自身声明的所有方法,包含public、protected和private方法。

    getMethod*()获取的是类的所有共有方法,这就包括自身的所有public方法,和从基类继承的、从接口实现的所有public方法。

    package reflect;

     

    import java.lang.reflect.Method; 

    public class InvokeTest {

      public int add(int a, int b) {

        return a + b;

      }

      public String echo(String str) {

        return "Hello " + str;

      }

     

      public static void main(String[] args) {

        Class<?> clz = InvokeTest.class;

     

        try {

          Method method = clz.getDeclaredMethod("add", new Class[]{int.class, int.class});

          Object result = method.invoke(clz.newInstance(), new Object[]{1, 2});

          System.out.println((Integer)result);

     

          method = clz.getDeclaredMethod("echo", new Class[]{String.class});

          result = method.invoke(clz.newInstance(), new Object[]{"World"});

          System.out.println((String)result);

        } catch (Exception e) {

          e.printStackTrace();

        }

      }

    }

  • 相关阅读:
    进度条简单实现
    bootstrap学习(二)-----Modal模态框
    PL/SQL Developer登入时候报ORA-12638: 身份证明检索失败的解决办法
    pdf.js在IIS中配置使用笔记
    JSON数据查询方法
    Visual Studio 2013 错误提示“未找到与约束匹配”的修正
    WebStorm 11激活方法
    Xamarin开发Android笔记:使用ZXing进行连续扫描
    Xamarin开发IOS笔记:切换输入法时输入框被遮住
    Xamarin开发Android笔记:拍照或相册选取图片角度问题
  • 原文地址:https://www.cnblogs.com/panning/p/5903568.html
Copyright © 2011-2022 走看看