从本篇开始java学习之路。
本节要点:
1)了解java语言程序基本结构
2)了解java编译工具、文档工具的特点及使用
首先从HelloWorld开始,可以借助IDE 如eclipse 新建一个java工程(手动编写代码也没有问题,但是借助IDE将更方便),
然后新建一个类,类名为HelloWorld,输入代码如下:
package com.learningjava; /** * the first example to show hello world * @version 1.1 2013-08-05 * @author wangdq */ public class HelloWorld { public static void main(String args[]) { System.out.println("Hello, World!");//Observe the tradition } }
下面通过这个小例子,熟悉开发java的基础内容。文中的是在Linux下操作的,windows下有对应的命令,请查阅相关资料。
1) java中类是构建所有java应用程序和applet的构建块,java应用程序中的全部内容必须都放在类中。
我们建立的源文件 HelloWorld.java,通过编译后生成类文件 HelloWorld.class,真正执行的就是类文件。linux下利用tree 命令可以查看工程目录结构如下 :
wangdq@wangdq:~/workspace/HelloWorld$ tree事实上此时还没有生成真正的HelloWorld.class 文件,只有编译后才会生成真正的class文件。这里我们手动编译并运行(利用IDE编译、生成文档、JAR十分简单,下面不做介绍)如下:
wangdq@wangdq:~/workspace/HelloWorld$ cd src/
wangdq@wangdq:~/workspace/HelloWorld/src$ javac com/learningjava/HelloWorld.java
wangdq@wangdq:~/workspace/HelloWorld/src$ cd ../bin/
wangdq@wangdq:~/workspace/HelloWorld/bin$ java com.learningjava.HelloWorld
Hello, World!
其中: javac 用于编译源文件;java 用于执行类文件。
2)当程序执行时,java虚拟机(JVM)会去加载 HelloWorld这个类,它会去在这个类中寻找main方法。
为了代码能够执行,在类的源文件中必须包含一个main方法。
根据java语言规范,main方法必须声明为public。关键字public称为访问修饰符,它用于控制程序的其他部分对这段代码的访问级别。
在main方法前,若不声明public或者声明为其他关键字,将得到以下错误信息:
Error: Main method not found in class com.learningjava.HelloWorld, please define the main method as:
public static void main(String[] args)
补充:在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类;同时,每一个类可以有一个main方法,单个类中的main方法可以用于对类进行单元测试,这一特点带来 很 多 便 利。
3) java语言对大小写敏感。代码中紧跟class之后的是类名HelloWorld,类以.java作为拓展名。
4) java中允许使用包将类组织起来,包机制与c++中的命名空间很类似。
上述代码中第一行将我们编写的类放在包 com.learningjava中,以便与别人提供的代码库区分开来。使用包机制的主要原因是确保类名的唯一性。
另外,可以通过import关键字,导入一个特定的类或者整个包。
import语句应该位于源文件的顶部(但位于package语句的后面)。
例如showTime程序导入了java.util包中的Date类来显示了当前的时间:
package com.learningjava; import java.util.Date; /** * a simple program to show time * @author wangdq */ public class ShowTime { public static void main(String[] args) { Date date = new Date(); System.out.println("Time now is: "+date);//show the current time } }
5) 文档生成
java中注释有三种注释方法。最常用的就是单行注释,使用//表示;另外可以使用/*和*/注释长段代码;还有一种注释以/**开始,以*/结束,这种注释可以帮助自动生成文档。这里我们利用JDK中的javadoc工具提取我们源文件中的注释来生成文档如下:
wangdq@wangdq:~/workspace/HelloWorld$ cd src
wangdq@wangdq:~/workspace/HelloWorld/src$ javadoc -d ../doc com.learningjava
Creating destination directory: "../doc/"
….
Generating ../doc/allclasses-frame.html...
Generating ../doc/allclasses-noframe.html...
Generating ../doc/index.html...
Generating ../doc/help-doc.html...
其中javadoc工具命令格式为: javadoc -d docDirectory nameOfPackage
我们的包名是 com.learningjava ,将生成的文档放在doc目录,则执行的命令是:
javadoc -d ../doc com.learningjava 。进入doc目录,找到index.html,查看文档效果如下:
6)应用程序打包
当我们编写完应用程序时,肯定希望将应用打包成一个单独文件(就好比windows下exe文件一样)而不是一个含有大量类文件的目录,java中归档文件JAR就是用于将应用程序打包。
打包一个应用程序通常有四个步骤,即编译、编写清单文件、创建JAR、测试JAR. 清单文件即MANIFEST.MF,可以编写manifest.txt,然后由jAR工具自动生成。
尤其要注意manifest.txt文件必须在结束时换行,而且冒号必须紧接Class关键字。我们通过给我们的HelloWorld创建JAR包以及查看其中的文件来讲述这些内容。在linux下运行如下命令:
Hello, World!
wangdq@wangdq:~/workspace/HelloWorld/bin$ cat > manifest.txt (创建清单文件)
Main-Class: com.gdut.HelloWorld
wangdq@wangdq:~/workspace/HelloWorld/bin$ jar -cvmf manifest.txt Hello.jar com (创建JAR)
added manifest
adding: com/(in = 0) (out= 0)(stored 0%)
adding: com/gdut/(in = 0) (out= 0)(stored 0%)
adding: com/gdut/HelloWorld.class(in = 435) (out= 297)(deflated 31%)
wangdq@wangdq:~/workspace/HelloWorld/bin$ jar -tf Hello.jar (查看JAR文件列表)
META-INF/
META-INF/MANIFEST.MF
com/
com/gdut/
com/gdut/HelloWorld.class
wangdq@wangdq:~/workspace/HelloWorld/bin$ java -jar Hello.jar (执行JAR)
Hello, World!
wangdq@wangdq:~/workspace/HelloWorld/bin$ jar -xf Hello.jar (解压JAR包)
wangdq@wangdq:~/workspace/HelloWorld/bin$ ls
com Hello.jar manifest.txt META-INF
wangdq@wangdq:~/workspace/HelloWorld/bin$ cat ./META-INF/MANIFEST.MF (清单文件)
Manifest-Version: 1.0
Created-By: 1.7.0_25 (Oracle Corporation)
Main-Class: com.gdut.HelloWorld
至此,通过HelloWorld程序我们已经初步了解了java程序的特点,以及手动编译和执行java程序、生成java文档、生成JAR的内容。