Java之路-反射2:调用方法、构造方法和继承关系

createh52周前 (12-14)技术教程15

一、调用方法

Class类主要通过以下方法获取Method

  • Method getMethod(name, Class...):获取某个publicMethod(包括父类)

  • Method getDeclaredMethod(name, Class...):获取当前类的某个Method(不包括父类)

  • Method[] getMethods():获取所有publicMethod(包括父类)

  • Method[] getDeclaredMethods():获取当前类的所有Method(不包括父类)

每个Method类包含一下获取Method类信息的方法

  • getName():返回方法名称,例如:"getScore"

  • getReturnType():返回方法返回值类型,也是一个Class实例,例如:String.class

  • getParameterTypes():返回方法的参数类型,是一个Class数组,例如:{String.class, int.class}

  • getModifiers():返回方法的修饰符,它是一个int,不同的bit表示不同的含义。

此外通过Method实例可以调用某个对象的方法:Object invoke(Object instance, Object... parameters)

、调用构造方法

Class实例获取Constructor的方法有:getConstructor(Class...):获取某个publicConstructor

  • getDeclaredConstructor(Class...):获取某个Constructor

  • getConstructors():获取所有publicConstructor

  • getDeclaredConstructors():获取所有Constructor

Constructor实例可以通过newInstance(Object... parameters)创建一个实例对象


三、获取继承关系

获取到某个Class对象的方法有:

//获取到String的Class

Class cls = String.class; //class java.lang.String

//s是String,因此获取到String的Class

String s = "";

Class cls2 = s.getClass(); //class java.lang.String

Class cls3 = Class.forName("java.lang.String");//class java.lang.String

  • Class getSuperclass():获取父类类型;

  • Class[] getInterfaces():获取当前类实现的所有接口。

通过Class对象的isAssignableFrom()方法可以判断一个向上转型是否可以实现。


相关文章

Java 字符串拼接 五种方法的性能比较分析

Java 字符串拼接 五种方法的性能比较分析 从执行100次到90万次> 字符串拼接一般使用“+”,但是“+”不能满足大批量数据的处理,Java中有以下五种方法处理字符串拼接,各有优缺点,程序开...

每天一点Java知识(java的面经和答案)

Java面试是技术面试中常见的一部分,涉及到Java编程语言的核心概念、数据结构、算法、以及一些系统设计等方面。1.Java的基本数据类型有哪些?回答:Java有8种基本数据类型:byte: 1字节,...

我把Java基础编程及思维导图整理的超级详细,小白都能看懂

Java基础编程及其思维导图目录:Java学习导图一、Java基本语法1.关键字与标识符 2.变量分类 3.运算符 4.流程控制二、数组1.数组概述 2.一维数组 3.二维数组 4.数组常见算法 5....

Java春招必知必会八股文210题,看完offer拿到手软

不积跬步无以至千里,下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面...

面试官:String是值传递还是引用传递

把一个String类型的参数传入方法,并在方法内改变了引用的值。 然后在方法外使用这个值,发现这个String还是之前的值,并没有改变。这里要向大家介绍一下,大家都知道java在传参时分为值 传递 和...

「java面试_01」String类为什么是final

1. 什么是不可变?String不可变很简单,如下图,给一个已有字符串"abcd"第二次赋值成"abcedl",不是在原内存地址上修改数据,而是重新指向一个新对象,新地...