反射

反射的概述:
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
要想解剖一个类,必须先要获取到该类的字节码文件对象。而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象.

反射就是把java类中的各种成分映射成一个个的Java对象

反射的三种定义方法:

public class Fanshe {
	public static void main(String[] args) {
		//第一种方式获取Class对象  
		Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。
		Class stuClass = stu1.getClass();//获取Class对象
		System.out.println(stuClass.getName());
		
		//第二种方式获取Class对象
		Class stuClass2 = Student.class;
		System.out.println(stuClass == stuClass2);//判断第一种方式获取的Class对象和第二种方式获取的是否是同一个
		
		//第三种方式获取Class对象
		try {
			Class stuClass3 = Class.forName("fanshe.Student");//注意此字符串必须是真实路径,就是带包名的类路径,包名.类名
			System.out.println(stuClass3 == stuClass2);//判断三种方式是否获取的是同一个Class对象
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
	}
}

一般来说用第一第二种的情况比较多


反射的一般实例:
/**
*这是通过反射来获取Student类
*/
~~~
public class StudentReflect {
	public static void main(String[] args) throws Exception {
		
		//获取反射类
		Class<?> c = Student.class;
		
		//获取Student类中的私有成员变量b
		Field fields = c.getDeclaredField("b");
		
		//设置权限
		fields.setAccessible(true);
		
		//通过反射获取Student类的构造方法并创建一个Student对象
		Student student = (Student) c.getConstructor(int.class, int.class).newInstance(10, 20);
		
		//利用反射改变类中私有变量的值
		fields.set(student, 15);
		System.out.println(student);
	}
}


/**
*这是Student类
*/
public class Student {
	int a=0;
	private int b=4;
	public Student(int a, int b) {
		super();
		this.a = a;
		this.b = b;
	}
	public Student() {
		super();
	}
	public int getA() {
		return a;
	}
	public void setA(int a) {
		this.a = a;
	}
	@Override
	public String toString() {
		return "Student [a=" + a + ", b=" + b + "]";
	}
	public int getB() {
		return b;
	}
	public void setB(int b) {
		this.b = b;
	}
	private void m1() {
		System.out.println("ss");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值