Java反射技术详细介绍

Java反射技术

在这里插入图片描述

反射概念

Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。

反射应用场景

  1. 几乎所有的框架都会用到反射
  2. 程序解耦合使用
  3. 代码更加的优雅

反射更多细节

  1. Jdk中的位置: java.lang.reflect包下
    在这里插入图片描述

  2. 获取字节码方式

    // 通过类的全限定类名获取
    Class<?> clazzA = Class.forName("com.open_source.demo.domain.Hero");
    // 通过类直接获取
    Class<Hero> clazzB = Hero.class;
    // 通过实例化对象获取
    Class<? extends Hero> clazzC = (new Hero()).getClass();
    // 基本类型的包装类的type获取
    Class<Byte> byteClazz = Byte.TYPE;
    Class<Short> typeClazz = Short.TYPE;
    Class<Integer> integerClazz = Integer.TYPE;
    Class<Long> longClazz = Long.TYPE;
    Class<Float> floatClazz = Float.TYPE;
    Class<Double> doubleClazz = Double.TYPE;
    Class<Character> characterClazz = Character.TYPE;
    Class<Boolean> booleanClazz = Boolean.TYPE;
    
  3. 测试类Hero省略Setter和Getter以及toString方法其中包含无参构造和满参构造

    package com.open_source.demo.domain;
    
    /**
     * 英雄实体类
     *
     * @author: tyvek
     */
    public class Hero {
         
        /**
         * 类型
         */
        private String type;
        /**
         * 姓名
         */
        private String name;
        /**
         * 战力
         */
        private Double CE;
    
        /**
         * 打印英雄属性
         *
         * @param hero 英雄对象
         */
        public void attrbute(Hero hero) {
         
            System.out.println(hero.getType() + ": " + hero.getName() + "输出伤害: " + hero.getCE());
        }
    
        /**
         * 为队友加油
         */
        public void fighting() {
         
            System.out.println("稳住 我们能赢");
        }
    
        /**
         * 向英雄发起进攻
         *
         * @param name 英雄名字
         */
        public void attack(String name) {
         
            System.out.println("准备向" + name + "发起进攻");
        }
    
        public Hero(String type, String name, Double CE) {
                 
            this.type = type;
            this.name = name;
            this.CE = CE;
        }
    
        public Hero() {
         
        }
    }
    
  4. 获取类的成员

    1. 获取类的构造函数

      import java.util.StringJoiner;
      
      /**
       * 反射测试类
       * @author: tyvek
       */
      public class ReflectClient {
             
          public static void main(String[] args) throws ClassNotFoundException {
             
              // 通过类的全限定类名获取
              Class<?> clazzA = Class.forName("com.open_source.demo.domain.Hero");
              // 获取所有构造函数字节码
              Constructor<?
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值