Java反射基础

1.概述:

  1. 在运行状态中,对于任意一个类,都能知道这个类的属性和方法。动态获取信息与动态调用对象的方法。
  2. 通过Class类实现。Class类——描述类的类。

2.获取Class对象:

  1. 使用forName静态方法;Class.forName("路径");
  2. 直接获取某一个对象的class; Class <?>  demo  =  int.class;
  3. 调用某个对象的getClass()方法;

         StringBuilder str = new StringBuilder("123");

         Class<?> klass = str.getClass();

3.通过反射生成的对象:

1、使用Class对象的newInstance()方法来创建Class对象对应类的实例。

     Class <?>     c     =     String.class;

     object     str     =     c.newInstance();

2、通过Class对象指定的ConStructor对象,在调用Constructor对象的newIndtance()方法来创建实例。

     Class <?>     c     =     String.class;

     Constructor     constructor     =     c.getConstructor(String.calss);

     Object     obj     =      construtor.newInstance("11");

4.获取方法:

1、getDeclaredMethods()方法返回类或者接口声明的所有方法,但不包括集成的方法。

2、getMethods()方法返回某个类的所有公有(public)方法。

3、getmethod()方法返回特定的方法,第一个参数为方法名,后面的参数为方法对应的Class对象。

public Method getMethod(String name,Class<?>...parametherTypes)

5.获取构造器信息:

通过Class类的getConstructor方法德大Constructor类的一个实例,而Constructor类有熊哥newInstace方法可以创建一个对象实例。

     public T newInsrtance(Object...initargs)

6.获取类的成员变量信息:

1、getFiled:访问公有的成员变量。

2、getDeclareField:所有已声明的成员变量。但不能得到其父类的成员变量。

3、getFileds和getDeclaredFields。

7.调用方法:

invoke()方法

原型:

public Object invoke (Object obj,Object...args)

throws IllegalAccessException, IllegalArgumentException,InvocationTargetException

实例:

public class test1 {

public static void main(String[] args) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {

    Class<?> klass = methodClass.class;

    //创建methodClass的实例

    Object obj = klass.newInstance();

    //获取methodClass类的add方法

    Method method = klass.getMethod("add",int.class,int.class);

    //调用method对应的方法 => add(1,4)

   Object result = method.invoke(obj,1,4);

   System.out.println(result);

  }

}

class methodClass {

      public final int fuck = 3;

      public int add(int a,int b) {

           return a+b;

      }

      public int sub(int a,int b) {

           return a+b;

      }

}

 

8.利用反射创建数组:

public static void testArray() throws ClassNotFoundException {

Class<?> cls = Class.forName("java.lang.String");

Object array = Array.newInstance(cls,25);

//往数组里添加内容

Array.set(array,0,"hello");

Array.set(array,1,"Java");

Array.set(array,2,"fuck");

Array.set(array,3,"Scala");

Array.set(array,4,"Clojure");

//获取某一项的内容

System.out.println(Array.get(array,3));

}

反射的基本概念:

 正常情况下:

  • 使用import导入所在包;
  • 明确的使用类名称或接口名称定义对象;
  • 通过关键字new进行类对象的实例化;

反射:直接利用Object与反射机制的混合调用类中的方法。(不需要明确类型的对象,所有的对象使用Object表示)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值