- 热门文章:
- · Velocity A template engine OR A Rule engine OR Both
- · 2005 JDJ Readers Choice Awards - Best Java Book Nominees:
- · javascript事件查询综合
- · 让我感觉很爽的CachedRowSet
- · java日记:学习java一年体会3
- · [原创] Eclipse 3.1M5a中创建RCP程序
- · Oracle & JSP 开发的小型信息管理系统 (五) 源代码4
- · Oracle & JSP 开发的小型信息管理系统 (四) 源代码3
- · Oracle & JSP 开发的小型信息管理系统 (三) 源代码2
- · Oracle & JSP 开发的小型信息管理系统 (二) 源代码1
- · Oracle & JSP 开发的小型信息管理系统 (一) 说明文档
- · 在Unix和Linux下安装JDK及环境设置
《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...
相关文章:
- · 读取foxpro格式的dbf文件
- · 什么是Extreme Programming(极限编程,简称XP)
- · 在struts中使用国际化(i18n)
- · 复杂类型javabean(数组成员)在jsp中的运用:在jsp页面间传递数组
- · 启动WebLogic后,不能进入控制台和应用的问题
- · Known Bugs in Tomcat 5 while using RMI
- · Annotations:hype or not?
- · Jsdk5.0中新增枚举enum类型使用例解
- · Java开源实践(1)--环境配置
- · 《Java 手机/PDA 程序设计入门》读书笔记8--LCDAUI低级API之 线程 时间控制
- · hibernate in 查询
- · Think in java Stream 经典
- · Eclipse启动时报错
- · 面向对象WEB开发框架:ECHO2 卷土重来
- · Spring+Struts+Hibernate入门例子Wiring Step By Step
- · scjp认证 我的拾零
- · 用OTA下载本机J2me程序至手机
- · ibm developer的一些对我有用的网址
- · eclipse 下用cdt插件开发c c++程序
- · java日记:学习java一年体会1
- · 今日笔记系列之Castor
- · [个人原创]JAVA 开发工具Jcreator使用技巧总结
- · jbuilder 2005 update 4
- · 旋风备忘录0.10软件介绍
- · 老外在TSSJS2005都聊些什么?
- · NokiaS40和S60开发平台1.0已知问题(翻译)
- · 给Eclipse3安装Lomboz插件
- · 在Eclipse上搭建Nokia手机的J2ME开发环境
- · Eclipse3.0下Struts +spring+ hibernate快速入门(1)
- · 招聘Eclipse开发人员
- · 在Tomcat里发布程序
- · 继续讨论Exception的处理
- · IntelliJ IDEA培训
- · AJaX for weblogs
- · java编辑多语言的福音--推荐一个经典的多语言文件编辑的插件ResourceBundle Editor
- · 通过reflect中得到数组类型
- · Jbuilder快捷键
- · tomcat+mysql数据库的连接池配置
