学习java最好的办法就是看jdk源代码,面对浩瀚的jdk(光源码就有40M多,比一个大型网站的源码都多)从何入手呢,要是能单步调试跟进到jdk源码里并且能查看其中的局部变量最好了。
可惜的是sun提供的jdk并不能查看运行中的局部变量,需要重新编译一下rt.jar。
废话少说,下面是编译jdk的具体步骤:
1.把C:\java\jdk1.6.0\src.zip解压到C:\java\jdk1.6.0\src
2.执行命令dir /B /S /X C:\java\jdk1.6.0\src\*.java > fileList-jdk1.6.0-src.txt生成一个包含所有源文件列表的txt文档
3.最重要的一步,运行以下命令
javac -verbose -nowarn -g -source 1.6 -target 1.6 -J-Xms512m-J-Xmx1024m -bootclasspath D:\Java\jre1.6.0\lib\rt.jar;D:\Java\jre1.6.0\lib\jce.jar;D:\Java\jre1.6.0\lib\jsse.jar;D:\Java\jre1.6.0\lib\resources.jar;D:\Java\jre1.6.0\lib\charsets.jar;D:\Java\jre1.6.0\lib\deploy.jar-sourcepath D:\Java\jdk1.6.0\src -classpath D:\Java\jdk1.6.0\src -d compiled@fileList-jdk1.6.0-src.txt
其中-d complied是要新建的文件夹,用来存放编译生成的class文件,@fileList-jdk1.6.0-src.txt就是刚才生成的文本文件,这个步骤大概要执行2-3分钟左右。
4. 执行完毕,所有新编译后的class文件都在complied文件夹中,重新打包生成rt.jar或者覆盖原来rt.jar中的类,生成新的rt.jar。最后把新生成的rt.jar放到c:\Java\jre1.6.0\lib和C:\java\jdk1.6.0\jre\lib覆盖原有的rt.jar,覆盖之前最好备份一下,这样就大功告成了。
需要说明的几点:
A. java最好安装在某盘的根目录下(如c:\Java\jdk1.6.0),不要放在program files下,因为这个文件夹名有个空格,执行javac命令时有可能产生不必要的麻烦。
B. 如果想在eclipse中跟踪调试,需要在Windows-Preferences-Java-InstalledJRE下,选择安装的jdk,点edit,然后在列出的jre system libraries列表中选择rt.jar,设置其中的Source attachment为C:\java\jdk1.6.0\src.zip。
以上内容转自(修改了其中的jdk安装路径,各位根据jdk安装路径自行修改)
http://www.douban.com/note/211369821/
-----------------------------------------------------------------------------------------
以下内容自己总结
C.输入上面第三步的命令时,一定要小心换行符,否则cmd会把有换行符的当成多条命令。
D.打包时,不要在jar里加入绝对路径
我的做法是进入D:\complied目录,执行 jar cvf rt.jar *
即可以生成只带当前包的jar文件
E.在eclipse进行编译时,会报ClassNotFound错误,原来是jvm在装载类时,缺少sun.misc.*类文件,查看src.zip,源文件根本没有这个包,可能是sun公司把它去除了,我的办法是找到原来的rt.jar复制其中的sun.misc包放进现在用的rt.jar中。
重新编译,debug查看局部变量成功!