快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

《java深度历险》读书笔记(一)


最近开始看

王森先生的《java深度历险》,从我一借到这本书就爱不释手,书里的内容异常吸引人。可以说这本书有助于我们对java程序运行过程有更深的理解。所以我将记录一些书中的重要结论,供大家参考,也作为自己的笔记。


 


 



第一章:

我们的机器里面至少有两套jre,一套在%JAVA_HOME%/jre,一套在%HOME%/Program Files/Java/jre1.x.x,那么当我们在命令行输入java xxx的时候会按照下面的逻辑来寻找适合的jre来执行程序:

1.       当前目录

2.       父目录下的jre子目录

3.       查询注册表里面的jre

所以我们在配置环境变量的时候一定要注重。


 


 



第二章:

构造类的时候可以动态地载入内存,这样可以从一定程度上提高效率,所有类的载入都需要有ClassLoader。

显式的动态载入类有两种方式:一种是Class.forName(),一种是ClassLoader.loadClass(),它们得到的都是Class对象,也就是相应类的元数据,然后调用newInstance()方式就可以构造这个类的对象了。这两种方式的原理都是有一个ClassLoader来载入类。我们可以直接使用默认的CLassLoader来载入类,也可以实现自己的ClassLoader(URLClassLoader就是一个例子)来载入。

而书中介绍的重点是默认的CLassLoader载入类的原理。JVM有三个ClassLoader,分别是Bootstrap Loader(这个转载器是C++写的,直接与JVM打交道),ExtClassLoader,AppClassLoader。默认情况下先哀求AppClassLoader来搜索class文件,AppClassLoader再向其parent类ExtClassClassLoader哀求,ExtClassClassLoader再哀求其parent“类”Bootstrap Loader搜索。假如父装载器在其搜索路径里找不到class文件就再由子装载器搜索,假如一直到AppClassLoader找不到就会抛出NoClassDefFoundError。这就是ClassLoader Hierarchy,简而言之就是所有转载哀求一直发送到Bootstrap Loader,然后找不到才由子装载器装载。

下面介绍3个转载器的搜索路径:

Bootstrap Loader:System.getProperty(“sun.boot.class.path”);得到,默认是jre/classes。修改的方式是执行程序的时候使用java -Dsun.boot.class.path=yourPath XXX

ExtClassLoader:System.getProperty(“java.ext.dirs”):得到,默认是jre/lib/ext。修改的方式是执行程序的时候使用java -Djava.ext.dirs=yourPath XXX

AppClassLoader:System.getProperty(“java.class.path”);得到,默认就是环境变量中的CLASSPATH。修改方式一个是修改环境变量,一个执行程序的时候使用java –classpath yourPath XXX

了解了这些以后我们就可以对类的装载有一定了解,以后放置第三方jar包的时候就能清晰放在什么目录最合适。当然书里也说了JDBC驱动和JNDI的类装载涉及ContexClassLoader,它是以上原理不相同的,书里也没有介绍。

第三章:

通过一个创建word文档的例子,介绍了JNI技术。

由于java程序都是在jvm基础上执行的,所以有很多与操作系统底层联系紧密的功能都难以实现。我们就可以用native要害字修饰一个本地方式,而这个方式是由其他语言来实现。这样我们可以调用windows的dll和Unix/Linux的so文件来和操作系统底层交互。

                                to be continued...




返回类别: 教程
上一教程: 澄清Java语言接口与继续的本质
下一教程: java中,this用途总结。。。

您可以阅读与"《java深度历险》读书笔记(一)"相关的教程:
· 《Java 手机/PDA 程序设计入门》读书笔记3--LCDAUI高级API之List
· Java Servlet Programming 读书笔记 - servlet生命周期
· 《Java极限编程》(Java Tool for Extreme Programming)读书笔记 (2)
· 《Java 手机/PDA 程序设计入门》读书笔记11-- MIDP数据库设计1
· 《Java极限编程》(Java Tool for Extreme Programming)读书笔记 (4)
    微笑服务 优质保证 索取样品