我所使用的步骤:
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上发现问题的的解决在于可以设置编译参数.()
参考:
https://stackoverflow.com/questions/10382929/how-to-fix-java-lang-unsupportedclassversionerror-unsupported-major-minor-versi
https://blogs.oracle.com/darcy/new-javac-warning-for-setting-an-older-source-without-bootclasspath
https://stackoverflow.com/questions/15882586/bootstrap-class-path-not-set/15882869
https://blog.csdn.net/hudashi/article/details/7058998