您的位置:首页 > 编程语言 > Java开发

JAVA补强系列======反射一

2014-09-10 22:18 176 查看
package com.sysweal.demo03;

import java.lang.reflect.Constructor;

/**
* 1:Class类对象提供如下常用方法:
*
* I:   public Constructor getConstructor……
* II:  public Method getMethod
* III: public Field getField
*
* 以上三种只能获得public的构造函数,方法和成员变量
* I:   public Constructor getDeclaredConstructor……
* II:  public Method getDeclaredMethod
* III: public Field getDeclaredField
*/

public class Reflect02 {

public static void main(String[] args) throws Exception{
/**
* 反射构造函数
*/
Class clazz = Class.forName("com.sysweal.demo03.Person");

//解剖出公共无参的构造函数
Constructor c = clazz.getConstructor(null);//解剖出无参的构造函数
Object obj = c.newInstance(null);//得到构造函数new出对象
System.out.println(obj);

//解剖出公共有参的构造函数
/**
* 这里反射有参数的构造方法,方法体里面只能放对应方法的参数类型
*/
Constructor c2 = clazz.getConstructor(String.class);
Object obj2 = c2.newInstance("fucking");//得到构造函数new出对象
Person p2 =  (Person) c2.newInstance("fucking");//得到构造函数new出对象

System.out.println(p2);

//---------------------------------------------------------------------------------------
//解剖出私有有参的构造函数
/**
* 1、因为声明是私有的,所以反射方法是:DeclaredConstructor
* 2、因为构造方法是私有的,所以得设计访问权限,暴力反射  setAccessible
*/
Constructor c3 = clazz.getDeclaredConstructor(int.class);
c3.setAccessible(true);//暴力反射,打开反射权限
Object obj3 = c3.newInstance(1);//得到构造函数new出对象
Person p3 = (Person) c3.newInstance(2);//得到构造函数new出对象
System.out.println(p3);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: