027.1 反射技术 Class

JAVA反射机制是在运行状态中,对于任意一个类,都可以知道这个类的全部属性和方法;对于任意一个对象,都可以调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.因此先要获取到每个字节码文件对应的Class类型的对象.
反射技术解决问题:初始代码固定后,减小修改代码,动态获取类
在普通类上层还有类,Class类,加载文件的时候就建立了Class对象

######################################################################
获取Class对象的方式:
######一:经过object的getClass方法获取,反射技术不适用这种方法
经过对象调用getClass方法java

Person p1 = new Person();
Person p2 = new Person();
Class clazz1 = p1.getClass();
Class clazz2 = p2.getClass();
System.out.println(clazz1 == clazz2);//true
//        System.out.println(clazz1.getName());//获取类的名字。

 

######二:每一个数据都有默认的静态属性,.class,用该属性就能够获取字节码文件对象
经过类.class获取。
Class clazz = Person.class;

######三:forName方法,经过名称就能够获取对应的字节码文件对象,经常使用方法dom

String className = "cn.itcast.domain.Person";          //类名前面须要加包名#########################(重)
// 1,经过给定的类名称,加载对应的字节码文件,并封装成字节码文件对象Class.
Class clazz = Class.forName(className);
//        System.out.println(clazz);

//经过newInstance()就能够建立字节码对象所表示的类的实例。
/*
 * 2,经过new建立给定的类的实例。
 * 3,调用该类的构造函数。
 * 一般被反射的类都会有提供空参数的构造函数。
 * 没有对应的构造函数,会报InstantiationException
 * 若是有提供,可是权限不够,会报IllegalAccessException
 */
Object obj = clazz.newInstance();

/* Person p = new Person();
 * 1,加载Person类,并将Person类封装成字节码文件对象。
 * 2,经过new建立Person对象。
 * 3,调用构造函数对对象初始化。
 */
System.out.println(obj);

 

#########################################################################
建立构造函数函数

String className = "cn.itcast.domain.Person";
Class clazz = Class.forName(className);

//获取指定的构造器。获取Person类中两个参数string,int的构造函数。
Constructor cons = clazz.getConstructor(String.class,int.class);

//有了构造器对象后,经过构造器对象来初始化给类对象。
Object obj = cons.newInstance("wangwu",23);
//Person p = new Person("lisi",21);

System.out.println(obj);
相关文章
相关标签/搜索