【java基础】04.反射

来源:互联网 发布:苏亚雷斯实况巅峰数据 编辑:程序博客网 时间:2024/06/14 10:57
A为一个类,a为A类的对象,则a instanceof A 为true,该语句是用来判断a是不是A的实例。
  
反射:运行时   视为动态语言
1.在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。
 
2.java反射机制提供的功能:
运行时判断任意一个对象所属的类。
运行时构造任意一个类的对象。
运行时判断任意一个类所具有的成员变量和方法。
运行时调用任意一个对象的方法
 
3.JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中
Class类:代表一个类。
Field 类:代表类的成员变量(成员变量也称为类的属性)。
Method类:代表类的方法。
Constructor 类:代表类的构造方法。
Array类:提供了动态创建数组,以及访问数组的元素的静态方法
 
newInstance():通过类的不带参数的构造方法创建这个类的一个对象。
getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes参数指定方法的参数类型。getConstructors():获得类的public类型的构造方法。getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes参数指定构造方法的参数类型
  3.1.Class类:Java中,无论生成某个类的多少个对象,这些对象都会对应同一个Class对象。
获取某个类或某个对象所对应的Class对象的常用的3种方式:
a) 使用Class类的静态方法forNameClass.forName(“java.lang.String”); 具体的某个类
b) 使用类的.class语法:String.class;
c) 使用对象的getClass()方法:先有对象,String s = “aa”; Class clazz = s.getClass();
 
3.2. 若想通过类的不带参数的构造方法来生成对象,我们有两种方式:
a) 先获得Class对象,然后通过该Class对象的newInstance()方法直接生成即可:
Class classType = String.class;
Object obj = classType.newInstance();
b) 先获得Class对象,然后通过该对象获得对应的Constructor对象,再通过该Constructor对象的newInstance()方法生成:
Class classType = Customer.class;
Constructor cons = classType.getConstructor(new Class[]{});
Object obj = cons.newInstance(new Object[]{});
3.3. 若想通过类的带参数的构造方法生成对象,只能使用下面这一种方式:
Class classType = Customer.class;
Constructor cons = classType.getConstructor(new Class[]{String.class, int.class});
Object obj = cons.newInstance(new Object[]{“hello”, 3});
 Integer.TYPE返回的是int,而Integer.class返回的是Integer类所对应的Class对象。
 4.使用反射的步骤:
 a.首先需要获得待处理类或对象所对应的Class对象。
 b.可以通过Class对象的方法获得类的信息。
 c.
   Class<?> classType = Class.forName(args[0]);   Method[] methods = classType.getDeclaredMethods();   for(Method method : methods){     system.out.println(method);  }
 
使用反射机制调用对象的私有方法,访问对象的私有成员
 
 
 
 注:此文档为学习圣思园风中叶教程结合自身学习所记录。
原创粉丝点击