刚学java不久,突然想这样操作试试看,javaSE提供的JDK能否,编译,修改,然后发布?
举例,比如System.out.println("Hello World");理论上是输出Hello World,但是我就是想,别人用我的jdk使用System.out.println("Hello World");输出地是确是System.out.println("CSDN"+"Hello World");想法有点bt,但我就是想实现,呵呵。我看到了在C:\Program Files\Java\jre6\lib目录下面有一个rt.jar解压以后是源码的.class 文件,我能否反编译修改里面的代码,然后再编译成 .class然后将原来的某些.class文件替换掉,然后打成jar包,这种方式可行吗?能否成功呢?我是初学者,不是很会操作,请高手指正,谢谢~~^_^

解决方案 »

  1.   


    也就是说这样可行?修改rt.jar里面的源码,然后在编译。
      

  2.   

    可行。
    去openjdk.java.net上下载源代码,编译一个自己的版本即可。
      

  3.   

    可以 本身就可以 如果你觉得你修改的时候不会出啥问题的话 还是说你想修改完之后传到网络上期待别人下你这个猫牌JDK
      

  4.   

    改源代码还可以自己写ClassLoader
      

  5.   

    谢谢高手,哈哈,我就是这么想地,哈哈,啥时候,发展成这样咱就牛了:java程序员先去sun或者ibm下载JVM然后上咱的网站上下载咱提供的工具类(www.javacat.com--网址都想好了)然后才能开发,哇哈哈,有点痴人说梦哈,不过我知道能改就行了,哇哈哈哈.........
      

  6.   

    改源代码应该可以实现吧,但如果你将rt.jar已经当做jar包引入到Eclipse中了,就不可以改了,要直接解压,然后用编辑器修改
    楼主很有想法嘛。中国程序员好像就是缺乏楼主这种创造力,哈哈,加油
      

  7.   


    哈哈,谢谢哈,不过这sun公司还是很狡猾的光公布jdk源码有啥用啊?啥时候吧JVM给公布了,那我这个痴人计划就有靠谱了~~~~
      

  8.   


    俺说的JVM源码,O(∩_∩)O~现在看JDK找到根就没了,再往下研究就卡壳了,只有学JVM才能算是正在学java吧?(幼稚想法?~~~)
      

  9.   

    下载openjdk代码包,里面的hotspot就是jvm。
      

  10.   

    你也想的美啊。  SUN公司不会要你这么做的,你只要修改了他本身带的 JAR,  运行装载就会出安全异常,如果能改的话,那病毒不疯了, 只要把小小的String类在jar包里换掉就可行了。 
      

  11.   

    可以改,但不建议改!JDK 的类加载器在运行类时是不允许加载以 java 开头包的类!需要在运行时使用调用引导类加载器进行加载。
      

  12.   

    使用 -Xbootclasspath/p 这个参数。建议楼主想点有用的东西,不要想这种没有用的!System.out 对象要更改并不是那么简单的,这个对象是使用 native 方法设置的。
      

  13.   

    你自己把 System.out 的系统输出流重新定向一下就可以了:import java.io.OutputStream;
    import java.io.PrintStream;public class Test2 {    static {
            System.setOut(HelloPrintStream.getInstance());
        }    public static void main(String[] args) {
            System.out.println("frankie");
        }
    }class HelloPrintStream extends PrintStream {
        
        private static PrintStream systemPrintStream = System.out;
        
        private static PrintStream instance = new HelloPrintStream(System.out);
        
        public static PrintStream getInstance() {
            return instance;
        }
        
        public static PrintStream getSystemPrintStream() { 
            return systemPrintStream;
        }    private HelloPrintStream(OutputStream out) {
            super(out);
        }    @Override
        public void print(String s) {
            super.print("Hello: " + s);
        }
    }
      

  14.   

    要是没记错,rt是不能修改的, 它是由根 classLoader加载的,是不能修改的,至少你使用同名的类是没希望了! 具体资料看 类的加载器相关文章 ,例如System 和String 要是可以能修改,做个java的黑客木马很简单了.
      

  15.   

    看看深入java虛擬機可能就知道點,有什么所謂的‘沙箱安全機制’;