java反射机制

反射功能强大,但是项目中不要滥用,以免污染其他代码。
java的反射机制原理
一 反射机制的概念:

指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法.这种动态获取信息,以及动态调用对象方法的功能叫java语言的反射机制.

二 反射机制的应用:

生成动态代理,面向切片编程(在调用方法的前后各加栈帧).

三 反射机制的原理:

1 首先明确的概念: 一切皆对象----类也是对象.

2 然后知道类中的内容 :modifier constructor field method.

3 其次明白加载: 当Animal.class在硬盘中时,是一个文件,当载入到内存中,可以认为是一个对象,是java.lang.class的对象.

package com.bjsxt.reflect;
//接口
public interface MyInterface {
	void interfaceMethod();
}
}

package com.bjsxt.reflect;

public class Person implements MyInterface {

private int id;
private String name;
private int age;
public Person() {
}

public Person(int id) {
	super();
	this.id = id;
}
public Person(int id, String name, int age) {
	super();
	this.id = id;
	this.name = name;
	this.age = age;
}


public int getId() {
	return id;
}


public void setId(int id) {
	this.id = id;
}


public String getName() {
	return name;
}


public void setName(String name) {
	this.name = name;
}


public int getAge() {
	return age;
}
private void privateMethod() {
	System.out.println("private method ...");
}


public void setAge(int age) {
	this.age = age;
}
public static void staticMethod() {
	System.out.println("static s  method..........");
}


@Override
public void interfaceMethod() {
	System.out.println("interface  Method..........");
	
}
package com.bjsxt.reflect;
//通过反射机制获取类
public class ReflectDemo01 {
	public static void main(String[] args){
		//获取反射对象(反射入口):Class
		//1. Class.forName()   2.xx.class  3. 对象.getclass
		
		//1. Class.forName("包名+类名(必须写全)")   --》  获取类
		try {
			 Class<?> perClazz = Class.forName("com.bjsxt.reflect.Person");
			 System.out.println(perClazz);
		} catch (ClassNotFoundException e) {
			
			e.printStackTrace();
		}
		
		
		//2.    类名.class 
		
		Class<?> perClazz2 = Person.class;
		System.out.println(perClazz2);
		
		
		//3.   对象.getClass()
		Person per = new Person();
		Class<?> perClazz3 = per.getClass();
		System.out.println(perClazz3);
		

	}
}

package com.bjsxt.reflect;

import java.lang.reflect.Method;

//通过反射机制获取方法
public class ReflectDemo2 {
	
	//获取方法
	public static void demo02() {
		//Class入口
		Class<?> perClazz = null;
		try {
			perClazz = Class.forName("com.bjsxt.reflect.Person");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//获取所有的    公共的方法
		//1.本类以及父类、接口中的所有方法 2.符合访问修饰符规律
		Method[] methods = perClazz.getMethods();
		for(Method method:methods) {
			System.out.println(method);
		}
		
	}
	public static void main(String[] args){
		demo02();

	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值