I tried to create a custom class String in java.lang package in my eclipse workspace.
initially I suspected that a same class in same package can not be created but to my utter surprise I was able to create a class (String) in same package i.e. java.lang
Now I am confused
1) why is it possible and
2) what can be the reason if that is allowed.
3) what will be the use if this type of creation of java classes is allowed in Java.
You can create a new class in java.lang package. If it was forbidden how Oracle developers would be able to develop Java at all? I am sure they use the same javac as we do.
But you will not be able to load it, because java.lang.ClassLoader (that any classloader extends) does not allow it, every class being loaded goes through this check
so you will end up in something like
As for classes that shadow existing classes like your
java.lang.Stringthey cannot be loaded because the System ClassLoader (default one) uses “parent first” strategy, so java.lang classes will be loaded from rt.jar with bootstrap classloader. So you will need to replace String.class in rt.jar with your version. Or override it using-Xbootclasspath/p:java option which prepends paths to bootstrap class loader search paths. So you can1) copypaste real String.java content into your String.java
2) change a method, eg
and compile your String.java
3) create a test class
4) run it as
and you will see