美文网首页
JAVA 反射机制-学习复盘

JAVA 反射机制-学习复盘

作者: jimdear | 来源:发表于2020-05-20 16:23 被阅读0次

与Java反射相关的类如下:

类名 用途
Class类 代表类的实体,在运行的Java应用程序中表示类和接口
Field类 代表类的成员变量(成员变量也称为类的属性)
Method类 代表类的方法
Constructor类 代表类的构造方法

image.png

获得类中属性相关的方法
方法 用途
getField(String name) 获得某个公有的属性对象
getFields() 获得所有公有的属性对象
getDeclaredField(String name) 获得某个属性对象
getDeclaredFields() 获得所有属性对象

参考: https://www.jianshu.com/p/9be58ee20dee

先上一个java 类

public class ReflectDemo {
    public int num;
    public String str;
    public ReflectDemo() {

    }
    public ReflectDemo(int num, String str) {
        this.num = num;
        this.str = str;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }

    public void reflectPrint() {
        System.out.println("reflectMethod:-----" + "---STR----" + str + "-----num:" + num);
    }
    
}

1.反射构造函数 -空的构造

          Class<?> className= Class.forName("ReflectDemo");
          Object object =className.newInstance();
          ReflectDemo reflectDemo=(ReflectDemo)object;
          reflectDemo.setNum(123);
          reflectDemo.setStr("reflect");
          reflectDemo.reflectPrint();

注意,这里如果没有声明一个空的构造函数的话,是会报错的, 因为newInstance 就是创建一个空的构造函数的意思

2.反射构造函数-非空的构造

        Class<?> className= Class.forName("ReflectDemo");
        Constructor<?> declaredConstructorBook = className.getDeclaredConstructor(int.class,String.class);
        declaredConstructorBook.setAccessible(true);
        Object object =declaredConstructorBook.newInstance(213,"New Reflect");
        ReflectDemo reflectDemo =(ReflectDemo)object;
        reflectDemo.reflectPrint();

这里是对非空函数进行反射, 然后传入相应的值进行构造

3.反射类方法.反射相应方法进行相应的操作

  Class<?> className= Class.forName("ReflectDemo");
  Constructor<?> declaredConstructorBook = className.getDeclaredConstructor(int.class,String.class);
   declaredConstructorBook.setAccessible(true);
   Object object =declaredConstructorBook.newInstance(213,"New Reflect");
   Method method= className.getMethod("getNum");
  method.setAccessible(true);
  int num =(int) method.invoke(object);
  System.out.println(" Num--------"+num);

4.反射相应的属性

        Class<?> className= Class.forName("ReflectDemo");
        Constructor<?> declaredConstructorBook = className.getDeclaredConstructor(int.class,String.class);
        declaredConstructorBook.setAccessible(true);
        Object object =declaredConstructorBook.newInstance(213,"New Reflect");
        Field field =className.getField("num");
        field.setAccessible(true);
        int nums =(int)field.getInt(object);
        System.out.println(" Nums--------"+nums);

5.获取包名

Class<?> className= Class.forName("com.jim.demo.ReflectDemo");
 System.out.println("classPackage name:==="+className.getPackageName());

相关文章

  • JAVA 反射机制-学习复盘

    与Java反射相关的类如下: 类名 用途Class类 代表类的实体,在运行的Java应用程序中表示类和接口Fi...

  • 为什么阿里人能够快速成长?看完他们Java架构进化笔记,我秒懂!

    Java架构进化笔记大致内容如下: 0-1年入门: Java基础复盘(面向对象+Java的超类+Java的反射机制...

  • Java中反射的用途

    Java的反射机制是Java特性之一,反射机制是构建框架技术的基础所在。灵活掌握Java反射机制,对大家以后学习框...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 反射之三

    总结内容源自以下文章 粗浅看java反射机制 反射机制应用实践 谈谈java反射机制 Java Reflectio...

  • java反射机制

    java的反射机制 1 JAVA的反射机制是什么?反射机制能做什么?反射机制的优点与缺点2 认识 Class...

  • [JAVA学习笔记] 反射机制

    [JAVA学习笔记] 反射机制 Java的反射通过Class类和java.lang.reflect类库实现。通过它...

网友评论

      本文标题:JAVA 反射机制-学习复盘

      本文链接:https://www.haomeiwen.com/subject/yclnohtx.html