Oracle培训(十六)——Core Java第十六章知识点总结——反射
Core Java第十六章知识点总结——反射
知识点预览
类对象
获取类对象的方式
反射包java.net.reflect
反射的作用
思考
1. 给定一个对象,要求输出这个对象的所有方法
public static void printMethod(Objectobject);
2.给顶一个字符串参数,这个参数表示一个类的名字,根据类名,创建该类的一个对象并返回
public static Object createObject(StringclassName);
类对象
1.java.lang.Class类的对象
类继承自哪个类
实现了哪些接口
有哪些属性
有哪些方法
有哪些构造方法
……
2.保存类的信息
.class读到JVM后用一个类存储
例:动物园里的熊猫笼子 笼子外面的熊猫标识牌(可以看成类对象)
获取类对象的方式(三种)
1. 类名.class
Class c = Student.class;
Class i = int.class();//8种基本数据类型也有类对象
2. getClass()方法(Object类定义)
以前讲的获取对象的实际类型(不准确),应该是获得某个类的类对象
Student s = new Student();
Class cs1 = s.getClass();
Class cs2 = Student.class;
不管是类的什么对象,不管以什么方式,获得的都是同一个类对象
3.Class.forName()方法
public static Class forName(String className) throws ClassNotFoundException
Class c = Class.forName(“ex04.Student”);//全限定名
Class.forName():类加载方法
4. 本章中使用的Student类的定义:
package chp16.ex10;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.lang.reflect.Method;/** * * @Author: Wentasy * @FullName: TestStudent.java * @Description: 反射的好处:应用反射的代码,增加程序的通用性 * @Create Date: 2012-8-20 */public class TestStudent { public static void main(String args[])throws Exception{ InputStream is = new FileInputStream("refelection.txt"); InputStreamReader ir = new InputStreamReader(is); BufferedReader br = new BufferedReader(ir); String className = br.readLine(); String methodName = br.readLine(); Class c = Class.forName(className); Object o = c.newInstance(); Method m = c.getDeclaredMethod(methodName); m.setAccessible(true); m.invoke(o); }}//refelection.txt内容://ex20.Student//play