Java第十六章小结

通过Java的反射机制可以更深入的控制程序的运行过程

反射
通过Java反射机制,可以在程序中访问已经装载到JVM中的Java对象的描述,实现访问、检测和修改描述Java对象本身的信息的功能。

众所周知,所有的Java类均继承了Object类,在Object类中定义一个getClass()方法,该方法返回一个类型为Class的对象。

获取到Class类对象

访问构造方法 

        在通过下列一组方法访问构造方法时,将返回 Constructor 类型的对象或数组。每个Constructor 对象代表一个构造方法。

 
import java.lang.reflect.Constructor;
 
import 练习.Demo1_161;
 
public class ConsDemo1_161 {
 
	public static void main(String[] args) {
		Demo1_161 d1=new Demo1_161("10","20","30");
		Class c1=d1.getClass();
		//获得所有构造方法
		Constructor[]dConstructor=c1.getDeclaredConstructors();
		for(int i=0;i<dConstructor.length;i++) {//遍历构造方法
			Constructor c=dConstructor[i];
			System.out.println("查看是否允许带有可变量的参数:"+c.isVarArgs());
			System.out.println("该构造方法的入口参数类型依次为:");
			Class[]pT=c.getParameterTypes();//获取所有参数类型
			for(int j=0;j<pT.length;j++) {
				System.out.println(""+pT[j]);
			}
			System.out.println("该构造方法可能抛出的异常类型为:");
			//获得所有可能抛出的异常信息类型
			Class[]eT=c.getExceptionTypes();
			for(int j=0;j<eT.length;j++) {
				System.out.println(""+eT[j]);
			}
			Demo1_161 d2=null;
			while(d2==null) {
				try {//如果构造方法的访问权限为private或protected,则抛出异常。即不允许访问
					if(i==2)//通过执行默认没有参数的构造方法创建对象
						d2=(Demo1_161)c.newInstance();
					else if(i==1)
						//通过执行具有两个参数的构造方法创建对象
						d2=(Demo1_161)c.newInstance("7",5);
					else {
						//通过执行具有可变数量参数的构造方法创建对象
						Object[]parametes=new Object[] {new String[] {"100","200","300"}};
						d2=(Demo1_161)c.newInstance(parametes);
					}
				}
				catch(Exception e) {
					System.out.println("在创建对象时抛出异常,下面执行setAccessible()方法");
					c.setAccessible(true);//设置为允许访问
				}
			}
			if(d2!=null) {
				d2.print();
				System.out.println();
			}
		}
	}
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值