- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
Java 深度探险系列
作者:成富,组织:孙景卫
Jingweisun@
目录
一、 Java深度历险(一)Java字节代码的操纵 3
动态编译Java源文件 3
Java字节代码增强 6
java.lang.inrsutment 7
总结 8
参考资料 9
二、 Java深度历险(二)——Java类的加载、链接和初始化 9
相关厂商内容 9
相关赞助商 9
Java类的加载 10
Java类的链接 10
Java类的初始化 11
创建自己的类加载器 13
参考资料 14
三、 Java深度历险(三)——Java线程:基本概念、可见性与同步 14
Java线程基本概念 14
可见性 15
Java中的锁 16
Java线程的同步 16
中断线程 17
参考资料 18
四、 Java深度历险(四)——Java垃圾回收机制与引用类型 18
Java垃圾回收机制 18
Java引用类型 19
强引用 20
软引用 20
弱引用 21
幽灵引用 21
引用队列 22
参考资料 23
五、 Java深度历险(五)——Java泛型 23
类型擦除 23
实例分析 24
通配符与上下界 25
类型系统 25
开发自己的泛型类 26
最佳实践 27
参考资料 27
六、 Java深度历险(六)——Java注解 27
使用注解 27
开发注解 28
处理注解 28
实例分析 32
参考资料 33
七、 Java深度历险(七)——Java反射与动态代理 33
基本用法 33
处理泛型 35
动态代理 36
使用案例 37
参考资料 37
八、 Java深度历险(八)——Java/IO 37
流 38
流的使用 38
缓冲区 40
字符与编码 41
通道 42
文件通道 42
套接字通道 43
参考资料 45
九、 感谢 45
十、 备注 45
一、Java深度历险(一)Java字节代
码的操纵
作者成富
【编者按】Java作为业界应用最为广泛的语言之一,深得众多软件厂商和开发者的推崇,更是被包括Oracle在内的众多JCP成员积极地推动发展。但是对于Java语言的深度理解和运用,毕竟是很少会有人涉及的话题。InfoQ中文站特地邀请IBM高级工程师成富为大家撰写这个《Java深度历险》专栏,旨在就Java的一些深度和高级特性分享他的经验。
在一般的Java应用开发过程中,开发人员使用Java的方式比较简单。打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java程序就可以了。这种开发模式背后的过程是:开发人员编写的是Java源代码文件(.java),IDE会负责调用Java的编译器把Java源代码编译成平台无关的字节代码(bytecode),以类文件的形式保存在磁盘上
(.class)。Java虚拟机(JVM)会负责把Java字节代码加载并执行。Java通过这种方式
来实现其“编写一次,到处运行(Writeonce,runanywhere)”的目标。Java类文件中包含的字节代码可以被不同平台上的JVM所使用。Java字节代码不仅可以以文件形式存在于磁盘上,也可以通过网络方式来下载,还可以只存在于内存中。JVM中的类加载器会负责从包含字节代码的字节数组(byte[])中定义出Java类。在某些情况下,可能会需要动态的生成Java字节代码,或是对已有的Java字节代码进行修改。这个时候就需要用到本文中将要介绍的相关技术。首先介绍一下如何动态编译Java源文件。
动态编译Java源文件
在一般情况下,开发人员都是在程序运行之前就编写完成了全部的Java源代码并且成功编译。对有些应用来说,Java源代码的内容在运行时刻才能确定。这个时候就需要动态编译源代码来生成Java字节代码,再由JVM来加载执行。典型的场景是很多算法竞赛的在线评测系统(如PKUJudgeOnline),允许用户上传Java代码,由系统在后台编译、运行并进行判定。在动态编译Java源文件时,使用的做法是直接在程序中调用Java编译器。
JSR199引入了Java编译器API。如果使用JDK6的话,可以通过此API来动态编译Java代码。比如下面的代码用来动态编译最简单的HelloWorld类。该Java类的代码是保存在一个字符串中的。
publicclassCompilerTest{
pub
文档评论(0)