这是我的项目结构:这是两个类的源码:
package com.snow;public class Test { public static void main(String[] args) {
String s = new String();
System.out.println(s);
}}
package java.lang;public class String { public String() {
        System.out.println("*******************");
    }}为什么没有打印出*********************符号呢?JavaString修改源码覆盖源码

解决方案 »

  1.   

    你没有引入包,另外把class类String换成其他的非关键字的比如TestString再试试!
      

  2.   

    因为你的类没有被加载,java.lang包是被保护的你不可能这样做
      

  3.   


    各位亲啊。什么时候String成关键字了???如果我可以直接修改jar包里的class我还需要覆盖吗?
      

  4.   

    自己去看ClassLoader以及类加载机制。
      

  5.   

    导包了也不管用啊。不是默认导入java.lang包吗?
      

  6.   

    你这个有问题,系统默认会导入java.lang包的,你这个包名不要和人家的也一样,这样你导与不导都是系统的String,换一个包名,然后再导入
      

  7.   

    java虚拟机在进行启动的时候会默认把一些需要的核心包里面的类加载进去,例如java.lang包等,所以你在用String的时候,jvm就会检测到java.lang.String类已经加载过了,所以不会使用你自己定义的String类,   你可以修改下你的包名或者类名,最好不要和java的核心包中的类名一样了。
      

  8.   

    jvm加载自己的类如java.lan.String用的classloader和加载自定义的类的classloader不一样,如果你的类名和包名和java.lan.String等一样 jvm出于保护不会让你伪装String类 出于安全考虑 否则别人用String类就用成你的类了
      

  9.   

    java自己有一个类String,你这样写应该会冲突吧,比方写一个new String();它应该怎么做,是new一个java本身有的String类还是new一个你写的呢
      

  10.   

    java类是jvm的bootstrap classloader加载的。你可以自己写了classLoader类,重写findClass优先加载自己写的类,这个类也可以调用。但是只有你写的类加载器认识这个类,父加载器不认识这个类
      

  11.   


    java.lang.NoSuchMethodError: main
    Exception in thread "main" JVM会认为是JDK中的String。
      

  12.   

    我写了一下,String的问题
      

  13.   

    麻烦你看下我这个问题:谢谢。http://bbs.csdn.net/topics/390432383
      

  14.   

    麻烦你看下我这个问题:谢谢。http://bbs.csdn.net/topics/390432383
      

  15.   

    麻烦你看下我这个问题:谢谢。http://bbs.csdn.net/topics/390432383
      

  16.   

    没办法,由于父类加载体制,你是无法破坏jdk的体制的,