I’m trying to look under the hood about java compilation. So I put my IDE away and started using MS-DOS command-line…
I created a simple project, as described in the tree below :
SampleApp
|____**src**
|_____pack
|______Sample.java
|____**classes**
This is the Sample.java source code :
public class Sample
{
private String s = new String("Hello, world");
public Sample(){
System.out.println(s);
}
}
I just want to compile this class, so I used the javac command :
prompt\SampleApp\src>javac -d ..\classes -sourcepath . pack\Sample.java
All works fine, but i didn’t expect that because I deleted my CLASSPATH environment variable before compiling my Sample.java file. So I was expecting a compiler error due to the fact that the compiler would not be able to find the java.lang.String class file.
I read this article http://www.ibm.com/developerworks/java/library/j-classpath-windows/ which helped me understand many things. The article author says that the default classpath is the current working directory. But I don’t understand why my source code compile without error. Could someone explain this to me?
The short answer is that the compiler knows where to find all of the standard Java SE library classes without you telling it.
The longer answer is that
Stringclass is being found on the bootclasspath. This is implicitly set by thejavaccommand to refer to the relevant JARs in the JDK installation. Thejavaccommand searches the bootclasspath before it looks for stuff on the regular classpath.