Class与ClassLoader

       Java是一种介于解释与编绎之间的语言, Java代码首先编绎成字节码, 在运行的时候再翻译成机器码。 这样在运行的时候我们就可以通过Java提供的反射方法(reflect)来得到一个Object的Class的额外信息, 灵活性很大,可以简化很多操作。

       Class: 任何一个Object都能通过getClass()这个方法得到它在运行期间的Class。 得到这个Class之后可做的事情就多了, 比如动态得到它的构造函数, 成员变量, 方法等等。 还可以再生成一份新的实例, 下面只给出几个我们常用的方法, 更详细的用法参照Java API

         Class Class.forName(String className) throwsClassNotFoundException: 这是个静态方法, 通过一个Class的全称来得到这个Class。

         String getName() 取得这个Class的全称, 包括package名。

         Object newInstance() 得到一个实例, 调用缺省的构造函数。

         例如我们有一个类: com.some.util.MyClass  如何得到它的一个实例呢? 可能有以下两种方法:

         MyClass myClass =new MyClass(), 直接通过操作符new生成;

         或者:

         MyClass myClass=  (MyClass)Class.forName(“com.some.util.MyClass”).newInstance();

       也许有人就会怀疑第二种方法实际意义, 能够直接new出来还干嘛绕这么个弯。 但实际上它的用处却非常大, 举个例子: 用过struts的人都知道, 在action-config.xml当中定义了一系列的formBean与actionBean, 当然每个form与action都具有同类型, 这样在一个request过来的时候我可以动态的生成一个form与action的实例进行具体的操作, 但在编码的时候我并不知道具体是何种的form与action, 我只调用它们父类的方法。 你如果要用第一种方法的话, 你得在编码的时候通过一个标志来判断每一次request需要具体生成的form与action, 代码的灵活性大大降低。 总的来说在面向接口的编程当中经常使用这种方法, 比如不同数据库厂家的JDBC Driver都是从标准的JDBC接口继承下去的, 我们在写程序的时候用不着管最终是何种的Driver, 只有在运行的时候确定。 还有XML的Parser也是, 我们使用的只是标准的接口, 最后到底是谁来实现它的, 我们用不着去管。


       ClassLoader: ClassLoader是一个抽象类,一般的系统有一个缺省的ClassLoader用来装载Class, 用ClassLoader.getSystemClassLoader()可以得到。不过有时候为了安全或有其它的特殊需要我们可以自定义自己的ClassLoader来进行loader一些我们需要的Class, 比如有的产品它用了自己的ClassLoader可以指定Class只从它指定的特定的JAR文件里面来加载,如果你想通过覆盖ClassPath方法来想让它用你的Class是行不通的。 有兴趣的可以参照Java API 的更详细的用法说明。


以上内容来自网络总结...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值