运行helloworld.java出错记录

程序:
/**
* @(#)Text1.java
*
*
* @author
* @version 1.00 2017/11/6
*/

public class helloWorld {
public static void main(string[] args) {
system.out.println("Hello World");
}


}
1、报错如下:
D:\java>javac 1.java
1.java:10: 错误: 类helloWorld是公共的, 应在名为 helloWorld.java 的文件中声明
public class helloWorld {
^
1.java:12: 错误: 找不到符号
public static void main(string[] args) {
^
符号:类 string
位置: 类 helloWorld
1.java:13: 错误: 程序包system不存在
system.out.println("Hello World");
^
3 个错误
---最后找到解决办法是将1.java修改为helloWorls.java,找到的解释是如果文件里面类的权限是public,文件名和这个类名一致,具体原因后面深入了解之后再记录。
2、报错如下:
【运行helloworld.java出错记录】helloWorld.java:12: 错误: 找不到符号
public static void main(string[] args) {
^
符号:类 string
位置: 类 helloWorld
helloWorld.java:13: 错误: 程序包system不存在
system.out.println("Hello World");
^
2 个错误
-----最后是发现system.out中S应该是大写System.out




3、D:\java>javac helloWorld.java
helloWorld.java:12: 错误: 找不到符号
public static void main(string[] args) {
^
符号:类 string
位置: 类 helloWorld
1 个错误
-----------string里面s修改为大写




经过1、2、3三次修改编译通过。-----感冒了,脑子感觉都不好用了--!


直接在命令行运行:
D:\java>java helloWorld.class
错误: 找不到或无法加载主类 helloWorld.class
此时在工具JCreator运行则正常
---解决办法是java helloWorld


具体原因是如下(参考网络大神们的各个分析):
javac

D:\java>javac
用法: javac
其中, 可能的选项包括:
-g生成所有调试信息
-g:none不生成任何调试信息
-g:{lines,vars,source}只生成某些调试信息
-nowarn不生成任何警告
-verbose输出有关编译器正在执行的操作的消息
-deprecation输出使用已过时的 API 的源位置
-classpath <路径>指定查找用户类文件和注释处理程序的位置
-cp <路径>指定查找用户类文件和注释处理程序的位置
-sourcepath <路径>指定查找输入源文件的位置
-bootclasspath <路径>覆盖引导类文件的位置
-extdirs <目录>覆盖所安装扩展的位置
-endorseddirs <目录>覆盖签名的标准路径的位置
-proc:{none,only}控制是否执行注释处理和/或编译。
-processor [,,...] 要运行的注释处理程序的名称; 绕过默认的搜索进程
-processorpath <路径>指定查找注释处理程序的位置
-d <目录>指定放置生成的类文件的位置
-s <目录>指定放置生成的源文件的位置
-implicit:{none,class}指定是否为隐式引用文件生成类文件
-encoding <编码>指定源文件使用的字符编码
-source <发行版>提供与指定发行版的源兼容性
-target <发行版>生成特定 VM 版本的类文件
-version版本信息
-help输出标准选项的提要
-A关键字[=值]传递给注释处理程序的选项
-X输出非标准选项的提要
-J<标记>直接将 <标记> 传递给运行时系统
-Werror出现警告时终止编译
@<文件名>从文件读取选项和文件名


javac 把java程序编写的类和接口编译成字节代码的class文件,上述命令帮助中我们看到它操作的是一个文件,最后会生成一个class文件。
然后java命令则是一个解释器,将class解释为机器能够识别的机器码。并最终由运行环境中的Runtime对代码进行运行,真正实现我们想要机器完成的工作。
其中java命令用法如下:
D:\java>java
用法: java [-options] class [args...]
(执行类)
或java [-options] -jar jarfile [args...]
(执行 jar 文件)
其中选项包括:
-d32使用 32 位数据模型 (如果可用)
-d64使用 64 位数据模型 (如果可用)
-server选择 "server" VM
-hotspot是 "server" VM 的同义词 [已过时]
默认 VM 是 server.
-cp <目录和 zip/jar 文件的类搜索路径>
-classpath <目录和 zip/jar 文件的类搜索路径>
用 ; 分隔的目录, JAR 档案
和 ZIP 档案列表, 用于搜索类文件。
-D<名称>=<值>
设置系统属性
-verbose:[class|gc|jni]
启用详细输出
-version输出产品版本并退出
-version:<值>
需要指定的版本才能运行
-showversion输出产品版本并继续
-jre-restrict-search | -no-jre-restrict-search
在版本搜索中包括/排除用户专用 JRE
-? -help输出此帮助消息
-X输出非标准选项的帮助
-ea[:...|:]
-enableassertions[:...|:]
按指定的粒度启用断言
-da[:...|:]
-disableassertions[:...|:]
禁用具有指定粒度的断言
-esa | -enablesystemassertions
启用系统断言
-dsa | -disablesystemassertions
禁用系统断言
-agentlib:[=<选项>]
加载本机代理库 , 例如 -agentlib:hprof
另请参阅 -agentlib:jdwp=help 和 -agentlib:hprof=help
-agentpath:[=<选项>]
按完整路径名加载本机代理库
-javaagent:[=<选项>]
加载 Java 编程语言代理, 请参阅 java.lang.instrument
-splash:
使用指定的图像显示启动屏幕
有关详细信息, 请参阅 http://www.oracle.com/technetwork/java/javase/documentation/index.html。



-----可以看到java后面跟的文件是一个class,是一个和class文件名字完全相同(大小写也要一样)的类



java 命令的作用就是Java虚拟机的作用,虚拟机的功能如下:

  • 通过 ClassLoader 寻找和装载 class 文件
  • 解释字节码成为指令并执行,提供 class 文件的运行环境
  • 进行运行期间垃圾回收
  • 提供与硬件交互的平台
------具体理解不够深入,先MARK下



??

    推荐阅读