java 反射


public interface China {
	static String names="接口";
	static int ages=11;
	void structure();
	void structure(String name,int age);
}


import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


public class Test {

	public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, NoSuchFieldException {
		Class<?> clazzOne=Users.class;
		Class<?> clazzTwo=Class.forName("Users");
		/**
		 * 获取对象名称
		System.out.println(clazzOne.getName());
		System.out.println(clazzTwo.getName());
		*/
		
		
		/**
		 * 通过无参构造实例化对象
		Users user=(Users) clazzTwo.newInstance();
		user.setName("丽水");
		user.setage(18);
		System.out.println(user);
		*/
		
		
		/**
		 * 取得全部的构造函数
		 Constructor<?> cons[]=clazzTwo.getConstructors();
		 Users u2= (Users) cons[0].newInstance();
		 System.out.println(u2);
		 Users u= (Users) cons[1].newInstance("威海市",1);
		 System.out.println(u);
		 */
		
		
		/**
		 * 获取所有的接口
		Class<?> intes[]=clazzTwo.getInterfaces();
		 for (int i = 0; i < intes.length; i++) {
            System.out.println("实现的接口   "+intes[i].getName());
    	}
    	*/
		
		
		/**
		 * 获取父类
		Class<?> temp=clazzTwo.getSuperclass();
        System.out.println("继承的父类为:   "+temp.getName());
		*/
		
		/**
		 * 取得全部的构造函数
		 Constructor<?> cons[]=clazzTwo.getConstructors();
		 for(Constructor<?> c:cons){
			 Class<?> parameterTypes[]=c.getParameterTypes();
			 int mo=c.getModifiers();
			 System.out.print(Modifier.toString(mo)+" ");	//获取访问类型
			 System.out.print(c.getName()+" ");				//获取名称
			 System.out.print("(");
			 for(int j=0;j<parameterTypes.length;++j){
	             System.out.print(parameterTypes[j].getName());	//获取参数
	             if(j<parameterTypes.length-1){
	                 System.out.print(",");
	             }
	         }
			 System.out.print(")");
			 System.out.println();
		 }
		 */
		
		
		/**
		 * 获取方法全部成员
		Method method[]=clazzTwo.getMethods();
		for(Method mothod:method){
			Class<?> returnType=mothod.getReturnType();	//返回类型
			Class<?> para[]=mothod.getParameterTypes();	//参数类型
			int temp=mothod.getModifiers();
			String types=Modifier.toString(temp);		//访问类型
			Class<?> exce[]=mothod.getExceptionTypes(); //获取抛出异常
			System.out.println(types+" "+returnType+" "+mothod.getName()+"( "+para+") throws" +exce);
		}
		*/
		
		
		/**
		 * 获取类全部属性
		// 取得本类的全部属性
		Field[] fieldDeclared = clazzTwo.getDeclaredFields();
		for(Field f:fieldDeclared){
			String types=Modifier.toString(f.getModifiers());
			System.out.println(types+" "+f.getType()+" "+f.getName());
		}
		// 取得实现的接口或者父类的属性
		Field[] field = clazzTwo.getFields();
		for(Field f:field){
			String types=Modifier.toString(f.getModifiers());
			System.out.println(types+" "+f.getType()+" "+f.getName());
		}
		*/
		
		
		/**
		 * 通过反射调用其他类中的方法
		//无参
		Method method=clazzTwo.getMethod("structure");
		method.invoke(clazzTwo.newInstance());
		//有参
		method=clazzTwo.getMethod("structure", String.class,int.class);
		method.invoke(clazzTwo.newInstance(),"Rollen",20);
		 */
		
		
		/**
		 * 通过反射操作属性
		Object obj = clazzTwo.newInstance();
		Field field = clazzTwo.getDeclaredField("name");
		field.setAccessible(true);
		field.set(obj, "张三");
		System.out.println(field.get(obj));
		*/
		
		/**
		 * 通过反射取得并修改数组的信息
		int[] temp={1,2,3,4,5};
		Class<?> demo=temp.getClass().getComponentType();
		System.out.println("数组类型: "+demo.getName());
        System.out.println("数组长度  "+Array.getLength(temp));
        System.out.println("数组的第一个元素: "+Array.get(temp, 0));
        Array.set(temp, 0, 100);
        System.out.println("修改之后数组第一个元素为: "+Array.get(temp, 0));
        */
		
		
		/**
	     * 反射修改数组大小
		int[] temp={1,2,3,4,5,6,7,8,9};
		Class<?> arr=temp.getClass().getComponentType();	//获取数组类型
		Object newArr=Array.newInstance(arr, 20);			//创建新数组长度20
		int co=Array.getLength(temp);						//获取数组长度
		System.arraycopy(temp, 0, newArr, 0, co);			//copy数组复制长度co
		int[] newTemp=(int[])newArr;
		for(int n:newTemp){
			System.out.print(n);
		}
		*/
	}
	
}


public class Users implements China{
	public Users(){
		System.out.println("实例化无参...Users");
	}
	public Users(String name, int age) {
		this.name = name;
		this.age = age;
		System.out.println("实例化有参...Users");
	}
	
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getage() {
		return age;
	}
	public void setage(int age) {
		this.age = age;
	}
	public String toString(){
        return "["+this.name+"  "+this.age+"]";
    }
	
	@Override
	public void structure() {
		// TODO Auto-generated method stub
		System.out.println("structure()");
	}
	@Override
	public void structure(String name, int age) {
		// TODO Auto-generated method stub
		System.out.println("tructure(String name, int age)");
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值