zoukankan      html  css  js  c++  java
  • Java反射的简单使用

    一.反射是什么

      在运行状态中,对于任意一个类,都能知道这个类中的所有属性和方法。对于任意一个对象,都能调用它的任意一个方法和属性。这种动态获取的信息以及动态调用对象的方法的功能称为Java的反射机制。

      所以通俗地说,反射就是在运行时,只要知道要操作的类是什么,就可以获取类的完整构造和调用对应的方法。

    二.反射的使用

      一般使用一个类,我们都是知道这个类,可以直接通过new创建对象来使用。

      而反射则是不知道这个类,不能用new创建对象的情况下,使用反射的API来调用该类的属性或方法。

      下面是一个简单的例子。

    public class User {
        private String name;
    
       //get set...      
    }
    public class DemoApplication {
        public static void main(String[] args) throws Exception {
    
            //正常情况下,创建类来调用
            User user = new User();
            user.setName("jade");
            System.out.println("name:" + user.getName());
    
            //使用反射来调用
            Class cls = Class.forName("com.example.demo.model.User");
            Constructor userConstructor = cls.getConstructor();
            Object userObj = userConstructor.newInstance();
          
            Method setNameMethod = cls.getMethod("setName", String.class);
            setNameMethod.invoke(userObj,"sam");
            Method getNameMethod = cls.getMethod("getName");
            System.out.println("name:" + getNameMethod.invoke(userObj));
    
        }
    }

      我们是通过反射使用set方法来传值,然后用反射使用get方法来获取值。上面运行的结果是:

    name:jade
    name:sam

      使用反射获取对象的步骤:

      1.获取类的Class实例对象。

    Class cls = Class.forName("com.example.demo.model.User");

      2.根据Class对象获取Constructor对象。

    Constructor userConstructor = cls.getConstructor();

      3.使用Constructor对象的newInstance方法获取反射类对象。

    Object userObj = userConstructor.newInstance();

      调用对象中的方法步骤:

      1.获取方法的Method对象。

    Method setNameMethod = cls.getMethod("setName", String.class);

      2.利用invoke调用方法。

    setNameMethod.invoke(userObj,"sam");

      这样就是反射的基本使用方式。

      

  • 相关阅读:
    mpeg2 ts流PAT,PMT,SDT的定义
    机顶盒和TV的连接 ---色差分量线(YPbPr)、AV线(三色线)
    how DVB SI EIT section mapping into transport stream packet?
    cocos2d 创建工程bat文件
    cocos2d 碰撞检测
    cocos2d 播放音乐
    cocos2d 显示中文(使用bmpfont generator这个工具)
    cocos init
    cocos2d 特效, effect
    cococ2d 进度条
  • 原文地址:https://www.cnblogs.com/shadoll/p/14694512.html
Copyright © 2011-2022 走看看