Java中Reflection的学习代码

因为看android source code的缘故, 里面用到了很多java的reflection机制,所以恶补了一下java知识

主要是学习了constructor ,  Class object etc.

顺手写了一些测试用代码, 贴出来供学习

 

 

import java.lang.reflect.*;
import java.lang.*;

public class Program
{
	
	class InnerClass{
		public int i = 0;
		
		class MostInnerClass {
		}
	}
	public Program() {
	}
	public Program(String str){
		this.str = str;
		System.out.println("Hello, Ctor with String param used");
	}
	private Program(String str, Integer i){
		this.str = str;
		this.i = i;
		System.out.println("Hello, Ctor with String & int param used");
	}
	
	public void getName() {
		System.out.println("--->" + this.str);
	}
	
	private String str = "Hello";
	private Integer i = 1;
	public static void main(String[] args) {
		try {
			Program program = new Program();
			Class progClass = Program.class;
			
			Class[] ctorArgs1 = new Class[1];
			ctorArgs1[0] = String.class;
			Constructor strCtor = progClass.getConstructor(ctorArgs1);
			System.out.println("Constructor found :" + strCtor.toString());
			
			Object[] initArgs = new Object[1];
			initArgs[0] = "Test";
			Object newIns = strCtor.newInstance(initArgs);
			
			Method method = progClass.getDeclaredMethod("getName");  
			method.invoke(newIns);
			
			System.out.println(" " + newIns.getClass());
			
			System.out.println("................................");
			System.out.println(InnerClass.MostInnerClass.class.getDeclaringClass() +" ");
			
			
			
			Class[] ctorArgs2 = new Class[2];
			ctorArgs2[0] = String.class;
			ctorArgs2[1] = Integer.class;
			Constructor strintCtor = progClass.getConstructor(ctorArgs2);
			System.out.println("Constructor found :" + strintCtor.toString());
			

		}
		catch(Exception ex) {
			System.out.println("Constructor doesn't exist or is " +
                "not public: " + ex.toString());

		}
	}
}


运行结果

Constructor found :public Program(java.lang.String)
Hello, Ctor with String param used
--->Test
 class Program
................................
class Program$InnerClass 
Constructor doesn't exist or is not public: java.lang.NoSuchMethodException: Program.<init>(java.lang.String, java.lang.Integer)


最后要说明的是getDeclaringClass, 它返回的是调用该函数的类所在的类,或者说是Class object的外层类, 这里得到 class Program$InnerClass

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值