Java 11:反射

1、

首先先放上知乎的一段关于虚拟机的解释,


JVM是一个进程,用来跑我们写的Java代码,上面的图是一个JVM内存模型。

代码Object o=new Object();首先将代码编译成class文件,然后被类加载器加载到JVM中,类Object加载到方法区,创建了Object类的class对象(对应的是是Object类而不是对象o,每个类只有一个class对象,作为方法区类的数据结构的接口),Jvm对象创建对象前会检查类是否加载,寻找对应的class对象,若加载好再为你的对象分配内存。

反射是程序运行过程中,需要动态加载的一些类,这些类之前可能用不到,假设程序可能用到Oracle和Mysql两个数据库,需要动态地根据情况加载驱动类,这时候就可以根据类的全名让jvm在服务器中找到并加载这个类,不同的数据库传入的类名不同。


2、

以下一段来自《李兴华的Java se实战》,也是一位知乎大神总结的

理解反射之前首先要理解反这个字的含义,那“正”是什么,当用户使用一个类的时候必须预先知道这个类,然后通过这个类产生实例化对象,“反”指的是通过对象找到类

Person p=new Person();//正着来

per.getClass.getName();//反着来

取得class对象的方法,public final Class<?> getClass(),反射中所有的泛型都定义为?,返回值是Object。getClass返回的是Class类的对象,所以这个Class就是所有反射操作的源头。

获得Class对象有三种方法:

1、Object的getClass方法,就是前面说到的

2、类名.class

3、使用Class内部定义的一个static方法,(主要使用),Class.forName()

取得了Class类对象以后,可以不依赖构造函数+new ,而使用public T newInstance(),

使用接口可以减少耦合,但是即使使用接口还是要使用关键字new,new成为耦合的元凶(意思是不管使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值