java反射实现接口_Java反射学习笔记

本文详细介绍了Java反射机制,包括获取Class对象、类名、修饰符、包信息、父类、接口、构造器、方法、变量和注解等关键概念,并提供了实例代码演示如何使用反射实现接口。通过反射,开发者可以在运行时检查类信息,实例化对象,调用方法,获取和设置变量值,是Java开发中的重要工具。
摘要由CSDN通过智能技术生成

非原创:以下内容都是学习Java反射时从网上摘录的信息汇总

Java反射机制可以让我们在编译期(Compile Time)之外的运行期(Runtime)检查类,接口,变量以及方法的信息。反射还可以让我们在运行期实例化对象,调用方法,通过调用get/set方法获取变量的值。

下面是一个Java反射的简单例子:

Method[] methods = MyObject.class.getMethods();

for(Method method : methods){

System.out.println("method = " + method.getName());

}

在这个例子中通过调用MyObject类的class属性获取对应的Class类的对象,通过这个Class类的对象获取MyObject类中的方法集合。迭代这个方法的集合并且打印每个方法的名字。

使用Java反射机制可以在运行时期检查Java类的信息,检查Java类的信息往往是你在使用Java反射机制的时候所做的第一件事情,通过获取类的信息你可以获取以下相关的内容:

Class对象

类名

修饰符

包信息

父类

实现的接口

构造器

方法

变量

注解

Class对象

在你想检查一个类的信息之前,你首先需要获取类的Class对象。Java中的所有类型包括基本类型(int, long, float等等),即使是数组都有与之关联的Class类的对象。如果你在编译期知道一个类的名字的话,那么你可以使用如下的方式获取一个类的Class对象。

Class myObjectClass = MyObject.class;

如果你在编译期不知道类的名字,但是你可以在运行期获得到类名的字符串,那么你则可以这么做来获取Class对象:

String className = ... ;//在运行期获取的类名字符串

Class class = Class.forName(className);

在使用Class.forName()方法时,你必须提供一个类的全名,这个全名包括类所在的包的名字。例如MyObject类位于com.mypkg.myapp包,那么他的全名就是com.mypkg.myapp.MyObject。

如果在调用Class.forName()方法时,没有在编译路径下(classpath)找到对应的类,那么将会抛出ClassNotFoundException。

类名

你可以从Class对象中获取两个版本的类名。

通过getName() 方法返回类的全限定类名(包含包名):

Class aClass = ... //获取Class对象,具体方式可见Class对象小节

String className = aClass.getName();

如果你仅仅只是想获取类的名字(不包含包名),那么你可以使用getSimpleName()方法:

Class aClass = ... //获取Class对象,具体方式可见Class对象小节

String simpleClassName = aClass.getSimpleName();

修饰符

可以通过Class对象来访问一个类的修饰符,即public,private,static等等的关键字,你可以使用如下方法来获取类的修饰符:

Class aClass = ... //获取Class对象,具体方式可见Class对象小节

int modifiers = aClass.getModifiers();

修饰符都被包装成一个int类型的数字,这样每个修饰符都是一个位标识(flag bit),这个位标识可以设置和清除修饰符的类型。

可以使用java.lang.reflect.Modifier类中的方法来检查修饰符的类型:

Modifier.isAbstract(int modifiers);

Modifier.isFinal(int modifiers);

Modifier.isInterface(int modifiers);

Modifier.isNative(int modifiers);

Modifier.isPrivate(int modifiers);

Modifier.isProtected(int modifiers);

Modifier.isPublic(int modifiers);

Modifier.isStatic(int modifiers);

Modifier.isStrict(int modifiers);

Modifier.isSynchronized(int modifiers);

Modifier.isTransient(int modifiers);

Modifier.isVolatile(int modifiers);

包信息

可以使用Class对象通过如下的方式获取包信息:

Class aClass = ... //获取Class对象,具体方式可见Class对象小节

Package package = aClass.getPackage();

通过Package对象你可以获取包的相关信息,比如包名。

父类

通过Class对象你可以访问类的父类&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值