zoukankan      html  css  js  c++  java
  • 反射

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

    在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法或是属性是私有的或是只对系统应用开放,这时候就可以利用Java的反射机制通过反射来获取所需的私有成员或是方法。

     反射中间有一个’反‘字,在理解反射之前我们先来理解下’正‘,所谓的正就是新建一个类,new一个类,再通过对象调用类的方法和属性,而反射是我们一开始并不知道类对象是什么,更别提初始化了

    通过反射修改属性的值

    package reflection;
    
    import java.lang.reflect.Field;
    
    import charactor.Hero;
     
    public class TestReflection {
     
        public static void main(String[] args) {
                Hero h =new Hero();
                //使用传统方式修改name的值为garen
                h.name = "garen";
                try {
                	//获取类Hero的名字叫做name的字段
                    Field f1= h.getClass().getDeclaredField("name");
                    //修改这个字段的值
                    f1.set(h, "teemo");
                    //打印被修改后的值
                    System.out.println(h.name);
                    
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    }
    

      



    getField和getDeclaredField的区别
    这两个方法都是用于获取字段
    getField 只能获取public的,包括从父类继承来的字段。
    getDeclaredField 可以获取本类所有的字段,包括private的,但是不能获取继承来的字段。 (注: 这里只能获取到private的字段,但并不能访问该private字段的值,除非加上setAccessible(true)) 

    ===============================

    大致意思是通过反射机制可以在仅改变配置文件而不改变class文件的基础上对class文件中的方法进行调用,有利于开发框架的使用

  • 相关阅读:
    176. Second Highest Salary
    175. Combine Two Tables
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
    169. Majority Element
    168. Excel Sheet Column Title
    167. Two Sum II
    160. Intersection of Two Linked Lists
    个人博客记录
    <meta>标签
  • 原文地址:https://www.cnblogs.com/tao7/p/12220775.html
Copyright © 2011-2022 走看看