I have myfile.java with a package statement (package X; ) . I put it in a folder X and compile it from X. Then, to run the code i have to go one folder above X and use the complete package name to run the class file. But if i run it from X , i get an error. Any explanation for this ?
Is this the reason ??? When we are inside X , jvm searches X and it finds a myfile.class with a package statement. So, it does not load this file because it expects it to be a part of another folder X (inside the current X) .
I made a folder X (call it X^) inside X and put myfile.class into X^ . Then from X >>> java X.myfile OR java -classpath . X.myfile WORKS . Just java myfile fails.
PS : One can memorize such things. But how much can one learn this way ? Reasoning will eliminate the need to memorize.
Rahul, you dont need to memorise, just 'burn-it-in' that:
When you declare a class in a package, invocation must take place in the 'immediate-super' directory.
Here is the logical reason:
-Lets say the name of your class is 'Rahul' and you declare it in a package called 'My'
-At this point java recognises your class as 'MyRahul' and NOT 'Rahul'.
I know your next question will be why??? The following may explain:
At work place in real life as a programmer:
If I name my class 'Rahul' and you name yours 'Rahul' in the file system and we
need to use your class, how do we tell java which 'Rahul' to run???.
I hope this helps.
In Your Pursuit Towards Certification, NEVER Give Up.
Hi Rahul , Java class loading is based upon classpath and every class is identified by its package name + class name and that's the reason you can have two class with same name in two different package. you might find my post How Classpath works in Java interesting