JAVA第一次上的课笔记.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
JAVA第一次上的课笔记

1.1.1Java发展史:1991年Sun公司为实现“物联网”成立了“绿色小组”,James Gosling于该年6月份开发一种新的语言并命名为OAK(橡树),一种精巧而安全的网络语言,适用于多线程编程,后发现OAK已是另一个公司的注册商标,改名为Java(太平洋上一个盛产咖啡的岛屿名字)。1.1.2Java虚拟机:一、Java虚拟机(Java Virtual Machine)是软件模拟的计算机,可以在任何处理器上安全并且兼容地执行保存在class文件中的字节码。工作原理如下图:二、.Java编译程序将Java源程序翻译为JVM可执行的字节码,字节码其实就是二进制编码,也叫伪代码。(Java.class可在其他操作系统中使用JVM直接运行,但C/C++编译后的obj文件不可运行,需重新编译)。三、.字节码的执行需要三个步骤:1.由类装载器(Class Loader)负责把类文件(class文件)加载到Java虚拟机中(此过程需要检查该类文件是否符合类文件规范)2.字节码校验器(Bytecode Verifier)检查该类文件的代码中是否存在着某些非法操作。3.由Java解释器把该类文件解释成为机器码执行。四、Java的“沙箱”运行模式:“沙箱”的四个组件:·类装载器··class文件检验器·Java虚拟机内置的安全特性·安全管理器类装载器:通过命名空间隔离类,使不同命名空间的类不会互相访问(显示指定了访问方式的例外),解决了类的访问范围问题。类的装载顺序问题和防止恶意加载的方法上图中的网络类装载器理解为用户自定义的装载器,启动类装载器是Java的顶级类装载器和标准扩展类装载器理解为系统自带的类装载器。例,当需要加载类A的时候,会先从父装载器开始寻找是否已经存在类A,如果没有,迭代寻找父装载器,直到启动类装载器返回结果,如果找到了,就由父装载器加载,如果都没有,则由自己加载。类装载器加载类有一些保护规则,如下:使用父装载器优先加载类的方式,能够防止系统类被替换。例,从网络上加载java.land.Integer将会被拒绝,因为由启动类装载器加载的Java API中已经存在,所以原Integer不会被替换。只有由同一个类装载器加载的且同一个包内的类才可以互相访问。例,一个自己写的病毒类java.lang.Virus,由于系统中不存在该类,所以上面的约束1无效,由网络类装载器加载成功,而且与java.lang.*类在同一个包,但是由于类装载器不相同,所以Virus也无法访问java.lang.*。增加黑名单。类装载器可以指定禁止加载的类列表,如果发现企图加载,则立即抛出异常。class文件检验器安全性开始进入到了类的内部了。Java虚拟机对class文件有4次检查:class文件的结构检查。在类被加载时进行。文件格式检查,检查包头、版本、文件长度等。类型数据的语义检查。在连接过程中进行。class文件检验器在运行时检查了一些Java语言在编译时应该遵守的强制规则。字节码验证。在连接过程中进行。我的理解就是检查方法,对方法(操作码、操作数)进行检查,确保能够正确访问。由于“停机问题”的缘故,检查的规则是一个特定的规则集合,而不是所有可能的情况。符号引用的验证。这个是在动态连接的过程中,对外部调用的检查。例,NoClassDefFoundError并不是在预加载过程弹出的,而是直到这个不存在的类首次被程序使用的时候才弹出。顺便提一下,动态连接时,查找被引用的类(如果需要就加载该类),把符号引用转换为直接引用(指针、偏移量)。二进制兼容问题,为什么要在动态连接时进行检查(上面第四条),一个原因是防止原有的class发生了变化,有专门的二进制兼容规则描述哪些情况是可以兼容的。例如,在被调用的类中新添加方法是可以的,但是给老方法改名是不可以的。我个人的理解就是:以符号引用的方法进行动态连接,只要符号不变,就 OK,符号变了就不行。Java虚拟机内置的安全特性·类型安全的引用转换(强制显示类型转换)·结构化内存访问(无指针)·自动垃圾回收·数组边界检查·空引用检查·不指明运行时数据空间分布。Java栈(每个线程一个)、方法区、垃圾收集堆的数据都不预先指明内存地址,只在运行时由Java虚拟机分配。·本地方法不受Java虚拟机安全性的限制。只要开始运行本地方法,就跳出了Java虚拟机的沙箱了。比较安全的做法,是不要直接调用本地方法,通过Java API进行调用,这样可以利用Java API本身的安全性来控制。·线程死亡不影响其它线程。安全管理器每个Java应用程序只有一个Policy对象,通过java.security.Policy.setPolicy()可以使用新的Policy 对象替换当前的Policy对象,类装载器利用这个Policy对象来帮

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档