Java反射

Java反射

一:  接口Type      所有已知实现类:Class
public interface Type     Type 是 Java 编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型变量和基本类型。
从以下版本开始:
1.5

一:  Class类  
public final class Class<T> extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射
为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、
char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。

Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

以下示例使用 Class 对象来显示对象的类名:
     void printClassName(Object obj) {
         System.out.println("The class of " + obj +
                            " is " + obj.getClass().getName());
     }
还可以使用一个类字面值(JLS Section 15.8.2)来获得命名类型(或 void)的 Class 对象。例如:
     System.out.println("The name of class Foo is: "+Foo.class.getName());

常用方法:
1:  public static Class<?> forName(String className)
                        throws ClassNotFoundException       //className - 所需类的完全限定名
返回与给定字符串相关联的类或接口Class对象,


2:  public Field getDeclaredField(String name)
                       throws NoSuchFieldException,
                              SecurityException

返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段(包括公有的或私有的)。name 参数
是一个 String,它指定所需字段的简称(即类定义中变量的引用标识符)。注意,此方法不反映数组类的 length 字段。

3:  public Field[] getDeclaredFields() throws SecurityException

返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问
和私有字段,但不包括继承的字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者
此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。

4:  public Constructor<T> getDeclaredConstructor(Class... parameterTypes)
                                      throws NoSuchMethodException,
                                             SecurityException
返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。parameterTypes 参数是 Class 对象的
一个数组,它按声明顺序标识构造方法的形式参数类型。

5:  public Constructor[] getConstructors()
                              throws SecurityException
返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。如果该类没有公共构造
方法,或者该类是一个数组类,或者该类反映一个基本类型或 void,则返回一个长度为 0 的数组。

6:  public Method getDeclaredMethod(String name,
                                Class... parameterTypes)
                         throws NoSuchMethodException,
                                SecurityException
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。name 参数是一个 String,它指定所需方
法的简称(即方法名),parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识该方法的形式参数类型。如果在某个类中声明了带有
相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;

7:  public Method[] getMethods()
                    throws SecurityException

返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接
口继承的那些的类或接口)的公共 member 方法。

public Method[] getDeclaredMethods() throws SecurityException   //所有方法包括私有的
public Method getMethod(String name,
                        Class... parameterTypes)
                 throws NoSuchMethodException,
                        SecurityException
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。name 参数是一个 String,用于指定所需方法的简称。
parameterTypes 参数是按声明顺序标识该方法形式参数类型的 Class 对象的一个数组。如果 parameterTypes 为 null,则按空数组处理。


8: public String getName()以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
9: public Package getPackage()   //获取此类的包
10: public Class[] getInterfaces()确定此对象所表示的类或接口实现的接口

<1>如果此对象表示一个类,则返回值是一个数组,它包含了表示该类所实现的所有接口的对象。数组中接口对象的顺序与此对象所表
示的类的声明的 implements 子句中的接口名顺序一致
<2>如果此对象表示一个接口,则该数组包含表示该接口扩展的所有接口的对象。数组中接口对象的顺序与此对象所表示的接口的声
明的 extends 子句中的接口名顺序一致。
<3>如果此对象表示一个不实现任何接口的类或接口,则此方法返回一个长度为 0 的数组。
<4>如果此对象表示一个基本类型或 void,则此方法返回一个长度为 0 的数组。

11: public Class<? super T> getSuperclass()

12: public boolean isArray()    //判定此 Class 对象是否表示一个数组类。

13: public boolean isPrimitive()判定指定的 Class 对象是否表示一个基本类型。
有九种预定义的 Class 对象,表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名,
即 boolean、byte、char、short、int、long、float 和 double。
这些对象仅能通过下列声明为 public static final 的变量访问,也是使此方法返回 true 的仅有的几个 Class 对象。

14: public boolean isEnum()当且仅当该类声明为源代码中的枚举时返回 true。

15: public boolean isInstance(Object obj)判定指定的 Object 是否与此 Class 所表示的对象赋值兼容。此方法
是 Java 语言 instanceof 运算符的动态等效方法。如果指定的 Object 参数非空,且能够在不引发 ClassCastException 的
情况下被强制转换成该 Class 对象所表示的引用类型,则返回 true,否则返回 false。
特别地,当该 Class 对象表示一个已声明的类时,若指定的 Object 参数是该类(或其任一子类)的一个实例则返回 true,
否则返回 false。如果此 Class 对象表示一个数组类,且通过身份转换或扩展引用转换,指定的 Object 参数能转换为一个数组类的对象,
则返回 true,否则返回 false。如果此 Class 对象表示一个接口,且指定 Object 参数的类或任一超类实现了此接口,则此方法返回 true,
否则返回 false。如果该 Class 对象表示一个基本类型,则此方法返回 false。

16: public boolean isInterface()判定指定的 Class 对象是否表示一个接口。

17: public T newInstance()
              throws InstantiationException,
                     IllegalAccessException
创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化之。

三: Constructor
定义:  public final class Constructor<T>extends AccessibleObjectimplements GenericDeclaration, Member
构造方法 : 无
常用方法:
1:  public String getName()以字符串形式返回此构造方法的名称。它总是与构造方法的声明类的简单名称相同。
2:  public Class<?>[] getParameterTypes()按照声明顺序返回一组 Class 对象,这些对象表示此 Constructor 对象所表示构造方法的形参类型。如果基础构造方法不带任何参数,则返回一个长度为 0 的数组。
3:  public T newInstance(Object... initargs)
              throws InstantiationException,
                     IllegalAccessException,
                     IllegalArgumentException,
                     InvocationTargetException使用此 Constructor 对象表示的构造方法来创建该构造方法的声明类的新实例,并用指定的初始化参数初始化该实例。个别参数会自动解包,以匹配基本形参,必要时,基本参数和引用参数都要进行方法调用转换。
如果基础构造方法所需形参数为 0,则所提供的 initargs 数组的长度可能为 0 或 null。

如果所需的访问检查和参数检查获得成功并且实例化继续进行,这时构造方法的声明类尚未初始化,则初始化这个类。

如果构造方法正常完成,则返回新创建且已初始化的实例。

 

 

 

 

 

 

 

 


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值