java 类的加载和反射

关于类的加载和反射,是学校学习不曾涉猎的内容,一直以为这么深奥的东西学不学都无所谓,现在才知道学校里学的东西不过把你领到了java的门口,这些深奥的东西也只是帮你跨进了一只脚,剩下的东西,还是只有进行了开发才知道。这里所讲到的大部分内容都是过滤过的简单内容,最重要的内容集中在最后,也就是为什么要了解加载和为什么要使用反射。

 

首先要说的是类的加载。当程序使用到某个类时,需要通过加载、连接、初始化三个步骤将这个类放到内存中。至于这三个步骤具体是怎么执行的,网上有很多相关的资料。

默认的加载器有以下三种:

  • Bootstrap ClassLoader——java核心类
  • Extension ClassLoader——jre扩展目录里的类
  • System ClassLoader——命令中(-classpath)或CLASSPATH所指定的类

它们从上往下是父子关系。用户可以自己创建类的加载器,具体不赘述。

 

接下来要说的是反射。初学时我们通常这样生成一个类:Person p = newStudent();而通过反射,我们可以通过下面三种方法来获得一个类 :

  • forName("类名")
  • 类名.class
  • 类名.getClass()

获得这个类之后,就可以通过这个类来获取实例,当然,也可以获取到这个类的Field和methods。

通过类来创建对象,可以直接newInstance(),也可以通过其构造器来newInstance()。

想要调用这个类的方法,可以先获得Method对象,让和通过invoke()方法来调用。

并且,一个类可以通过设置setAcessible(boolean flag)来设置其private变量。

这里就简单介绍反射使用上的一些内容。

 

然后回到最初提出的问题,为什么要了解加载和为什么要使用反射。这里不得不提到Spring这个java开发的框架,虽然我现在写这篇文章的时候对Spring几乎一无所知,我仅仅知道Spring的框架通过配置Property来管理类。而反射恰恰是Spring的基础。

在实际的开发中,你有时候甚至不会知道你要生成的是哪个类,但是你却要调用它的某个方法(当然,你会预先知道你会得到的是哪几个类,并且他们都共有这个方法,只是你不知道具体是哪个类),你往往会从Spring的框架或者配置文件甚至动态的程序中得到类的名字(一般是String类型),然后通过反射的方法来调用它们。

以上仅仅是我个人的体会。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值