反射

Servlet容器(构造器)反射启动MyServlet

1,什么是反射:能够分析类信息的能力叫做反射

2,反射是如何工作的

类的生命周期:

 

1)获取class对象:

            (运行时阶段)类名.class (类对象阶段)对象名.getClass Class.forName(全类名)

3,如何获取class对象

路程图:

代码实现:

定义一个person类,内部定义好成员变量,构造方法和成员方法

public class Person {
	
	private String nameString;
	private int age;
	
	public Person() {
		
	}
	
	public Person(String nameString, int age) {
		this.nameString = nameString;
		this.age = age;
	}

	public String getNameString() {
		return nameString;
	}

	public void setNameString(String nameString) {
		this.nameString = nameString;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [nameString=" + nameString + ", age=" + age + "]";
	}

}

定义测试类

public class refulectDemo1 {
	
	/**
	 *      1.Class.forName("全类名"):将字节码文件加载进内存,返回class对象
		2.类名.class:通过类名的class获取
		3.对象.getClass(): getClass()方法在object类当中定义着
	 * @throws ClassNotFoundException 
	 */
	public static void main(String[] args) throws Exception {
		// 1.Class.forName("全类名"):
		Class class1 = Class.forName("reflect.Person");
		System.out.println(class1);
		
		//2.类名.class:通过类名的class获取
		Class class2 = Person.class;
		System.out.println(class2);
		
		//3.对象.getClass()
		Person person = new Person();
		Class class3 = person.getClass();
		System.out.println(class3);
		
	}

}

用==进行比较

System.out.println(class1 == class2);
System.out.println(class2 == class3);

 输出

true
true

4,class对象的功能

/*通过反射获取Person类对象*/
Class aClass = Class.forName("com.qcby.reflect.Person");

Field[] fields = aClass.getDeclaredFields();
System.out.println("获取Person的所有属性对象");
for (Field field : fields) {
    System.out.println(field);
}
System.out.println("获取Person的age属性对象");
Field age = aClass.getDeclaredField("age");
System.out.println(age);
System.out.println("-------------------------------------\n");


Constructor[] constructors = aClass.getDeclaredConstructors();
System.out.println("获取Person的所有构造方法");
for (Constructor constructor : constructors) {
    System.out.println(constructor);
}
System.out.println("获取Person的无参构造方法");
Constructor constructor = aClass.getDeclaredConstructor();
System.out.println(constructor);
System.out.println("获取Person的有参构造方法");
Constructor constructor1 = aClass.getDeclaredConstructor(String.class,Integer.class);
System.out.println(constructor1);
System.out.println("-------------------------------------\n");

Method[] declaredMethods = aClass.getDeclaredMethods();
System.out.println("获取Person的所有普通方法");
for (Method declaredMethod : declaredMethods) {
    System.out.println(declaredMethod);
}
System.out.println("获取Person的getAge普通方法");
Method getAge = aClass.getDeclaredMethod("getAge");
System.out.println(getAge);
System.out.println("获取Person的getAge普通方法");
Method setAge = aClass.getDeclaredMethod("setAge",Integer.class);
System.out.println(setAge);
System.out.println("-------------------------------------\n");

System.out.println("获取Person的全类名");
System.out.println(aClass.getName());
System.out.println("获取Person的类名");
System.out.println(aClass.getSimpleName());

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值