1、单个class的编译
新建“Helloworld.java”文档,
public class Helloworld{
public static void main(String args[]){
System.out.println("Hello java world!");
}
}
保存。
使用命令提示符。
C:/Documents and Settings/Administrator>javac
'javac' 不是内部或外部命令,也不是可运行的程序或批处理文件。
=====未设置path环境变量,所以javac并非是系统命令!
C:/Documents and Settings/Administrator>cd C:/Program Files/Java/jdk1.6.0_20/bin
C:/Program Files/Java/jdk1.6.0_20/bin>javac
用法:javac <选项> <源文件>
其中,可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的操作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath <路径> 指定查找用户类文件和注释处理程序的位置
-cp <路径> 指定查找用户类文件和注释处理程序的位置
……(人工省略)
C:/Program Files/Java/jdk1.6.0_20/bin>javac E:/Helloworld.java
====编译成功,在所在文件夹下生成一个Helloworld.class的文件,全部是字节码。
C:/Program Files/Java/jdk1.6.0_20/bin>java
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-client to select the "client" VM
-server to select the "server" VM
-hotspot is a synonym for the "client" VM [deprecated]
The default VM is client.
-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
A ; separated list of directories, JAR archives,
and ZIP archives to search for class files.
……(人工省略)
关于classpath的使用:
C:/Program Files/Java/jdk1.6.0_20/bin>java E:/Helloworld.class
Exception in thread "main" java.lang.NoClassDefFoundError: E:/Helloworld/class
Caused by: java.lang.ClassNotFoundException: E:/Helloworld.class
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: E:/Helloworld.class. Program will exit.
=====未找到class,编译错误。
C:/Program Files/Java/jdk1.6.0_20/bin>java E:/Helloworld
Exception in thread "main" java.lang.NoClassDefFoundError: E:/Helloworld
Caused by: java.lang.ClassNotFoundException: E:/Helloworld
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: E:/Helloworld. Program will exit.
C:/Program Files/Java/jdk1.6.0_20/bin>java -classpath e: Helloworld
Hellow java world!
====使用classpath路径命令,终于编译成功。
**配置java path路径:
选择“我的电脑”,鼠标右击,选择“属性”,调至“高级”面板,
点击“环境变量”,选择“系统变量”,找到“path”,双击或点击“编辑”按钮!
复制jdk路径至path中,两个path之间使用“;”隔开。
**关闭原来的命令提示符!重新开一个命令提示符**
C:/Documents and Settings/Administrator>java
Usage: java [-options] class [args...]
(to execute a class)
or java [-options] -jar jarfile [args...]
(to execute a jar file)
where options include:
-client to select the "client" VM
-server to select the "server" VM
-hotspot is a synonym for the "client" VM [deprecated]
The default VM is client.
……(人工省略)
2、多个class的编译
新建一个“Helloworld.java”文件,
public class A{
}
class B{
}
class C{
public static void main(String args[]){
System.out.println("C");
}
}
保存。
使用命令提示符。
C:/Documents and Settings/Administrator>javac e:/Helloworld.java
e:/Helloworld.java:5: 非法字符: /8220
System.out.println(“C”);
e:/Helloworld.java:5: 需要 ';'
System.out.println(“C”);
^
e:/Helloworld.java:5: 非法字符: /8221
System.out.println(“C”);
^
e:/Helloworld.java:5: 需要 ';'
System.out.println(“C”);
^
4 错误
====因为输出语句C,使用了中文的双引号“”,导致程序错误!,修正,重新编译。
C:/Documents and Settings/Administrator>javac e:/Helloworld.java
e:/Helloworld.java:1: 类 A 是公共的,应在名为 A.java 的文件中声明
public class A{}
^
1 错误
====因为类名与文件名不一致,导致编译错误,修改文件名,与定义的public 类名称一致。
C:/Documents and Settings/Administrator>javac e:/A.java
C:/Documents and Settings/Administrator>java -classpath e: A
Exception in thread "main" java.lang.NoSuchMethodError: main
====在类A中,没有main函数,所以编译出错,需要找到类中含有main函数的类才能够编译成功!
C:/Documents and Settings/Administrator>java -classpath e: c
Exception in thread "main" java.lang.NoClassDefFoundError: c (wrong name: C)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: c. Program will exit.
====类名使用小写字母c,与实际的“C.class”不一致,导致编译出错,从中可以发现,java是大小写敏感的语言。
C:/Documents and Settings/Administrator>java -classpath e: C
C
====编译完成,输出“C”!