对于最简单的java程序HelloWorld
在目录desktop下写一个H.java内容如下
如果打包的话
package ss;
public class H
{
public static void main(String[] args)
{
System.out.println("HelloWorld!");
}
}
然后再cmd进入命令行cd 进入desktop
C:\Users\zkl\Desktop>
C:\Users\zkl\Desktop>javac -d . H.java
就建立了一个s文件夹,里面有H.class
或者是:C:\Users\zkl\Desktop>javac H.java
再自己建立一个desktop下的文件夹 名为:s;
再把刚才的生成的H.class 剪切到s文件夹内
这两种都可以把H.class 打包在s文件夹下
************************************************************************************************************
现在我们来运行H.class,这里我分了四种情况!(请确保你的desktop下没有刚才生成的H.class)
第一种情况:
在C:\Users\zkl\Desktop>java H.java
错误: 找不到或无法加载主类 H.java
第二种情况:
在C:\Users\zkl\Desktop>java s.H.java
Hello World!
***************现在请把你的s文件夹里的H.class文件剪切到desktop下,注意是剪切!****************
第三种情况:
在C:\Users\zkl\Desktop>java H.java
Exception in thread "main" java.lang.NoClassDefFoundError: H (wrong name: s/H) (后面省略)
第四种情况:
在C:\Users\zkl\Desktop>java s.H
错误: 找不到或无法加载主类 s.H
**************************现在再把deaktop下的H.class剪切到s文件夹下,然后C:\Users\zkl\Desktop>cd s进入s文件夹*******************************
在C:\Users\zkl\Desktop\s>java H
Exception in thread "main" java.lang.NoClassDefFoundError: H (wrong name: s/H)(后面省略)
第六种情况:
在C:\Users\zkl\Desktop\s>java s.H .java
错误: 找不到或无法加载主类 s.H
可见只有第二种情况下是对的,为什么?
java 包的目的就是封装类,我们要用或执行一个类必须严格的从包名出发(如果打包了的话) ,
而且这个包不仅体现在能看见的一层一层的文件夹包含关系上,而且反映在这个被打包的类的内在逻辑结构上
所以,在第三和第五种情况下就是 虽然找到了H.class 但是依然NoClassDefFoundError(wrong name: s/H)
所以,在除第二种的情况下是 错误: 找不到或无法加载主类 s.H 或 错误: 找不到或无法加载主类 H
总结:只有第二种情况 既满足逻辑结构,又满足物理上的文件结构 才能执行成功!