对反射的一些理解

反射是框架的灵魂,通过对反射的理解,能够更好的入手框架。

为什么这样说呢,因为在学习spring的注入和动态代理的时候都是运用反射来实现的,后面会详细讲。

java中的对象有两种类型,编译时类型和运行时类型。

 - 编译时类型是编写代码时所声明的类型

 - 运行时类型指为对象赋值时所采用的类型

Student stu = new Person();

stu在编译时为Student类型 在运行时为Person类型

当程序还没运行时,没发获取这个类的方法和属性, 只有在运行时才能获取。

什么是反射

动态获取信息及动态调用的对象的方法就是java的反射机制。

  • 动态获取信息即在运行状态下,对于任意一个类,都能获取到他的所有信息(成员变量,构造方法,方法,包等)

  • 动态调用对象,,对于任意一个类,都能够调用到他的所有方法和属性(同上)

  • 反射的步骤 :(1)获取class对象 (2)调用Class对象锁对应的类中定义的方法 

当程序要使用一个类的时候,首先要获得他的字节码文件即.class文件,通过类加载器将字节码文件加载到 JVM 内存中,生成一个class对象(一个类只会生成一个class对象)这个class对象包含这个类所有的方法和属性。

获取反射对象

forName()

最为常用

//以Student类为例 student 类有name属性和方法
package high.School;
public class School{
public static void main(String[] args) {
       Student student = new Student();
       //获取student类对象
       Class stu = Class.forName(high.School.Student);//全路径 包名.类名 写全路径相当于绝对路径不容易出错
       //进一步获取其属性
       stu.getName();       
}
}

.class()

获取其class属性

//以Student类为例 student 类有name属性和方法
package high.School;
public class School{
public static void main(String[] args) {
       Student student = new Student();
       //获取student类对象
       Class stu = Student.class;
       //进一步获取其属性
       stu.getName();       
}
}

getClass()

返回一个对象的运行时类

//以Student类为例 student 类有name属性和方法
package high.School;
public class School{
public static void main(String[] args) {
       Student student = new Student();
       //getClass()获取student类对象
       Class stu =student.getClass();
       //进一步获取其属性
       stu.getName();       
}
}

相关的拓展:

学习类加载器的内容 对反射机制理解有帮助作用

参考博文:https://blog.csdn.net/sinat_38259539/article/details/71794617?spm=1001.2014.3001.5502)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值