Java 反射

一:反射前述

  1. 动态语言:是一类在运行时可以改变其结构的语言:例如新的函数,对象,甚至代码。通俗的说就是在运行时代码可以根据某些条件改变自身结构。
  2. 主要动态语言:Object-c,C#,JavaScript,PHP,Python等
  3. 静态语言:与动态语言相对应,运行时结构不可变的语言。如Java,C,C++
  4. Java不是动态语言,但我们可以利用反射机制获得类似动态语言的特性,让编程更灵活。 反射机制允许程序在执行期间借助Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。加载完类之后,在堆内存的方法区就产生了一个Class类型的对象,此对象包含类的完成结构信息。

二:通俗讲法

  1. 我们都知道所有的java类都是继承了object这个类,在object这个类中有一个方法:getclass().这个方法是用来取得该类已经被实例化了的对象的该类的引用,这个引用指向的是Class类的对象。

三:什么是反射?

//反射示例:
class user{
	private String name;
	private int age;
}
class test{
	public static void main(Stirng[] args){
		Class c1 = Class.forName("com.pojo.User");
		Class c2 = Class.forName("com.pojo.User);
		//其中c1和c2的hashcode值一样,因为一个类的结构在内存中只保存一份。
		//一个类被加载之后,类的整个结构都被封装在Class对象中
	}
}

四:获得反射的几种方式

  1. 一个加载的类在JVM中只会有一个Class实例,一个Class对象对应的是一个加载到JVM中的一个.class文件。
  2. 每个类的实例都会记得自己是由那个Class实例所生成,通过Class可以完整的得到一个类中的所有的被加载的结构。
  3. Class类是Reflection的根源,针对任何你想动态加载运行的类,唯有先获得相应的Class对象。
//常用方法:
//ClassForName(String name):返回指定类名name的Class对象
//newInstance():调用缺省构造函数,返回Class对象的一个实例
//getName():返回此Class对象所表示的实体的名称
class Person{
	private String name;
}
class test2{
	public static void main(String[] args){
		Person person = new Person();
		//方式一:通过对象获得
		Class c1 = person.getClass();
		//方式二:forname获得
		Class c2 = Class.forName("com.pojo.Person");
		//方式三:通过类名.class获得
		Class c3 = Person.class;
		//方式四:基本内置类型的包装类都有一个Type类型
		Class c4 = Integer.TYPE;
		//获得父类类型
		Class c5 = c1.getSuperclass();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值