热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

最近开始看王森先生的《java深度历险》,从我一借到这本书就爱不释手,书里的内容非常吸引人。可以说这本书有助于我们对java程序运行过程有更深的理解。所

最近开始看

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

http://www.gaodaima.com/40742.html《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深度历险》读书笔记(一)》,跪求各位点评,若觉得好的话请收藏本文,by 搞代码

原创文章,转载请注明: 转载自搞代码

e7ce419cf2d6ad34d01da2ceb8829eed.png

微信 赏一包辣条吧~

023a57327877fb4402bcc76911ec18ea.png

支付宝 赏一听可乐吧~



推荐阅读
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 微信商户扫码支付 java开发 [从零开发]
    这个教程可以用作了解扫码支付的整体运行过程,已经实现了前端扫码,记录订单,回调等一套完整的微信扫码支付。相关链接:微信支 ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • RN即ReactNative基于React框架针对移动端的跨平台框架,在学习RN前建议最好熟悉下html,css,js,当然如果比较急,那就直接上手吧,毕竟用学习前面基础的时间,R ... [详细]
author-avatar
手机用户2502900835
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有