欢迎光临
我们一直在努力

《java深度历险》读书笔记(一)-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

最近开始看

王森先生的《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…

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 《java深度历险》读书笔记(一)-JSP教程,Java技巧及代码
分享到: 更多 (0)

相关推荐

  • 暂无文章