美文网首页
java反射

java反射

作者: pinnuli | 来源:发表于2018-07-31 10:56 被阅读0次

一、Class类的使用

类是对象,任何一个类都是java.lang.class类的实例对象,这个类,这个实例对象可以有三种表达方式,比如Student类:

  • 任何一个类都有一个隐含的静态成员变量class
Class c1 = Student.class;
  • 通过getClass方法获得
Class c2 = Student.getClass();
  • forName
Class c3 = Class.forName("com.Student");

c1,c2,c3表示了Student类的类类型(class type),可以通过类的类类型创建该类的对象实例---->通过c1 or c2 or c3创建Student的实例对象

Student stu = c1.newInstance();

二、动态加载类

  • 静态加载类:编译时加载的类,通过new创建对象是静态加载类
  • 动态加载类:运行时加载的类,编译时不用管类是否存在或者是否错误等问题

三、获取方法信息和成员变量,构造函数信息

方法信息

  • 所有的public的函数,包括父类继承而来的
Method[] ms = c.getMethods();
  • 所有该类自己声明的方法,不问访问权限
Method[] ms = c.getDeclaredMethods();
  • 返回值类型的类类型
Class returnType = ms[i].getReturnType();
  • 参数列表的类型的类类型
Class[] paramTypes = ms[i].getParameterTypes();
  • 方法的名称
String methodName = ms[i].getName();

成员变量

  • 所有的public的成员变量的信息
Field[] fs = c.getFields();
  • 该类自己声明的成员变量的信息
Field[] fs = c.getDeclaredFields();
  • 成员变量的类型的类类型
Class fieldType = field.getType();
  • 成员变量的名称
String fieldName = field.getName();
  • 构造函数
  • 所有的public构造函数
Constructor[] cs = c.getConstructors();
  • 所有的构造函数
Constructor[] cs = c.getDeclaredConstructors();
  • 构造函数的参数列表,得到的是参数列表的类类型
Class fieldType = field.getType();

更多方法看API文档


四、方法反射的基本操作

现有A类如下:

class A{
    public void print(){
        System.out.println("helloworld");
    }
    public void print(int a,int b){
        System.out.println(a+b);
    }
        public void print(String a,String b){
    System.out.println(a.toUpperCase()+","+b.toLowerCase());
    }
}

1.要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型

A a1 = new A();
Class c = a1.getClass();

2.通过名称和参数列表来获取方法

Method m = c.getMethod("print", int.class,int.class);

3.方法的反射操作

Object o = m.invoke(a1, 10,20);

这个操作的效果等同于a1.print(10,20)

通过方法的反射,我们可以绕过编译

参阅:
慕课网:反射——Java高级开发必须懂的

相关文章

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java反射机制入门

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

  • Java基础之反射

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

  • 反射之一

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

  • 反射之二

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

  • Java基础之反射

    Java基础之反射 反射基本介绍 反射的使用通过反射调用属性和方法通过反射获取配置文件 反射基本介绍 Java反射...

  • Java 反射机制

    Java 反射机制 什么是反射 Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 ...

  • 一探究竟:Java反射效率低的原因到底在哪?

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

  • 面试官说:大家都说 Java 反射效率低,你知道原因在哪里么

    预备知识 了解 Java 反射基本用法 看完本文可以达到什么程度 了解 Java 反射原理及 Java 反射效率低...

  • Java面试题之JavaSE高级

    一、Java中的反射 1.说说你对Java中反射的理解 java中的反射首先是能够获取到Java...

网友评论

      本文标题:java反射

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