【java高级特性之反射】Field类和Constructor类的使用

!!!反射就是将Java类中的各个成分映射成为相应的java类。

一.Constructor(构造方法)反射:
利用Constructor来构造对象:
1.获取Constructor的示例对象:
Constructor con=String.class.getConstructor(StringBuffer.class);
2.利用Constructor对象的newInstance方法来创建对象:
con.newInstance(new StringBuffer("abc"));
上述两步等效为:new String(new StringBuffer("abc"));

小知识点:"abc".getClass()==String.class//结果为true;


二.Field(成员变量)字段的反射:

示例代码如下:

	package com.oterman.reflect;


	import java.lang.reflect.Field;


	/**
	 * 该例子演示Field类的使用;
	 */
	public class FieldDemo {
		public static void main(String[] args) throws Exception {
			ReflectPoint pt1=new ReflectPoint(3,5);
			Class clazz=pt1.getClass();
			
			Field fieldY=clazz.getField("y");
			//fieldY代表的是类的成员的变量,不是对象的成员的值
			System.out.println(fieldY.get(pt1));//输出值为5
			
	//		Field fieldX=clazz.getField("x");//会报错,因为x是用private来修饰的;
			Field fieldX=clazz.getDeclaredField("x");
			fieldX.setAccessible(true);
			System.out.println(fieldX.get(pt1));//输出值为3
		}
		
	}
	//用来做反射演示用;
	class ReflectPoint{
		private int x;
		public int y;
		public ReflectPoint(int x,int y){
			this.x=x;
			this.y=y;
		}
	}



你可能感兴趣的:(JavaSE)