本文共 867 字,大约阅读时间需要 2 分钟。
我所使用的步骤:
1.如想要修改java.lang.Object源码;新建Object.java,package 路径为package java.lang; ; 2.使用反编译工具,将想要修改的源文件比如Object.class打开,copy其内容到1的java文件中; 3.使用java编译命令(这算是比较低级的做法)编译Object.java为Object.class文件;(也可以利用eclipse的编译功能.) 4.使用压缩软件打开(而不是解压,如果解压的话还要再麻烦一些)rt.jar,替换其下的/lang/Object.class文件 5.测试.其中出现的问题有:
1.java版本有问题:
Java SE 10 = 54,Java SE 9 = 53,Java SE 8 = 52,Java SE 7 = 51,Java SE 6.0 = 50,Java SE 5.0 = 49,JDK 1.4 = 48,JDK 1.3 = 47,JDK 1.2 = 46,JDK 1.1 = 45
我所使用的javac命令是jdk1.8的,而我所编译的目标文件是1.7的,所以会出这个问题;
使用下面的编译命令可以解决编译的问题:/jdk1.8/bin/javac -source 1.7 -target 1.7 T.java
但是这样是不被推荐的,虽然使用高版本的JDK可以通过指定编译source和target参数来兼容低版本JDK,但只是class文件格式上的,如果引用了高版本JRE库中某些方法一样会再低版本的JDK上报错;比如java.util.concurrent.ConcurrentHashMap.keySet()这个方法.
2.使用1编译命令,在编译后会报一个warning:
warning: [options] bootstrap class path not set in conjunction with -source 1.7
在stackflow上发现问题的的解决在于可以设置编译参数.()
参考: