说明:由于需求的要求,程序需要支持一些非标准化的东西,这些一般是无法预料的。如何让java来支持这种无标准化的东西呢,一般有两个方法:
1、通过重载来支持新特性,这是标准的做法,一般我们也应该这样去做。
2、通过修改jre,重构它来技能新特性。这应该算作是旁门左道了吧(这里也主要说的是这一种了)。大多情况下通过第一条我们就可以满足要求了,但如果我们支持的特性是比较基础(底层)的东西,通过第一种方法你可能要一路重载过来,java的类实在是太多了,往往我们只关注上层的实现。要是去看下层,各种类各种模式不是我们这种小菜 能掌控的,阿况你去重载一个比较底层的东东,那它之上的你都 要重建了,这是不现实的,因此我就想到这个方法,外科手术式的修改,直达根源。
如何来完成这个过程呢!(做之前一定要清楚自己在做什么),
思路:
jre和我们平时看到的类是一样的,它只不过是把写的好类打包给我们用而已,而面者是编译后的class文件。
我们要做的就是:
1、找到实现我们需求的代码,进行修改
2、编译修改后的源码文件生成 .class文件,
3、用生成的.class替换jre中相应包中的相应.class文件
4、测试
动手之前要下载一份与当前jre相配的源码。
1、找到实现我们需求的代码,
这个过程最好是把jre源码加载到eclipse中跟踪定位,找到后要认识它,了解它,(最后我们要干了它^_^).找到后你也可以在liabary中看到它具体在jre中的那个包里。
2、修改相应的源码文件生成.class(注意兼容性哦)
根据我们要求对源码进行修改,这里的修改还是尽量在源码的基础上改,以免产生不必的影响。修改完生就可以编译它了。
javac xxxx(要加上-Xlint:unchecked 在src目录下编译 xxxx是你要编译的修改文件的相对路径)
3、解压相应的包,把生成的.class替换进行,重压。
jar cvfm [jarname.jar] meta-inf/manifest.mf .
4、用生成的包替换jre中的包,可以测试修改了。(注意)
从来没有系统学过java,记录这个过程以便以后用到时可以copy
本文介绍了在特殊需求下如何修改Java JRE源码来支持非标准化功能。通过重载和直接修改JRE源码两种方法进行探讨,强调了直接修改JRE作为解决底层问题的手段。详细步骤包括定位需求代码、修改源码、编译生成新的.class文件并替换JRE中的原始文件,最后进行测试。
563

被折叠的 条评论
为什么被折叠?



