经过前面几章的讲述,相信大家已经对Java已有了基本的了解。这一章,我就教大家如何去写一个最最最简单的程序。前面我们已经提到,Java程序是在虚拟机当中运行的,所以,你的电脑应该要安装一个虚拟机(一个软件),这个虚拟机我们将其称为“Java运行环境(Java Runtime Environment,简称JRE)”。同时,由于我们的“代码”在运行之前要先编译成为“字节码”,所以我们还需要一个工具来对代码进行编译,我已经为大家准备好这个工具包,名称为JDK(Java SE Development Kit),这个工具包本身已经捆绑了JRE,所以你如果要进行简单的开发,只要下载JDK然后安装就可以了。当然,如果是真正的开发,仅仅依靠JDK是不够的,所以网络上还提供了很多工具,比较著名的有Eclipse、JBuilder、NetBeans等,不过,对于初学者而言,我还是建议大家先打好基础,不要在没有站稳脚跟之前就想着跑步。
大家可以直接进入Oracle的网站下载最新版本的JDK:
http://www.oracle.com/technetwork/java/javase/downloads/
下载的时候要根据你的系统选择32位或64位的,安装过程比较简单,不断Next就可以了,由于JDK本身是集成了JRE的,所以在安装的时候你会看到有两个位置要你确认安装目录的,按你的习惯选择就可以了。例如,我选择了C:\Program Files\Java这个路径,安装完成后共看到两个文件夹(具体名称跟你选择的版本有关):
细心的你可能会发现,在jdk1.8.0_51下面也有一个jre目录,并且里面的内容居然跟jre1.8.0_51是一模一样的,为什么要安装两次,这不是多此一举吗?要知道老子的硬盘资源可是很宝贵的(你懂的)。其实,这两个jre是各自有分工的,如果你再细心一点,会看到jdk1.8.0_51目录下的那个jre跟jre1.8.0_51并非完全一样的,前者占用的硬盘空间会更大些,因为jdk1.8.0_51目录下的jre是供开发者使用的,所以还包含了一些专门针对开发的jar文件,而外部的jre1.8.0_51则是供其他程序使用的,例如IE浏览器。之所以这样划分,是为了避免开发者的工作不至于影响其他程序的正常工作(例如服务器可能要调用外部那个JRE),两个JRE是独立运行的。
下面,我们就用最原始的方法来写一个最简单的Java程序,我们使用的代码编写工具就是Windows自带的记事本,够原始了吧。
我们先在D盘新建一个JavaTest的目录用来存放我们的代码,在记事本中敲入以下代码,然后保存为Clock.java
编写完代码之后,我们需要对代码进行编译,我们需要用到的编译器就是位于jdk1.8.0_51\bin目录下的javac.exe,这是一个Dos程序,因此我们需要进入Dos界面来运行。我们直接在命令行输入javac,可以看到如下的提示:
上面的第一行“用法”已经告诉了我们如何使用这个命令,中间是可选的选项,最后是源文件路径,我们在Dos中输入以下命令:
javac -d D:\JavaTest D:\JavaTest\Clock.java
javac后面的-d选项表示我们输出的目录是D:\JavaTest,要编译的源文件是D:\JavaTest\Clock.java。执行完之后,你可以在D:\JavaTest找到Clock.class,这就是编译后的字节码文件。
接下来,我们要运行这个字节码文件。由于字节码文件要在虚拟机里面运行,我们在jdk1.8.0_51\bin目录下看到有一个名称为java.exe的文件,同样,这个也是一个Dos命令,通过执行这个命令,我们可以启动虚拟机并执行我们的程序。同样方法,我们看一下这个命令的用法:
参照第一行“用法”的提示,我们输入以下命令:
这个命令当中,-classpath选项指示java在哪里查找类,然后跟着“类名称”。可以看到屏幕中输出了“Hello Kitty”的字样,这是我们的程序当中System.out.println("Hello Kitty");运行的结果。我们回过头来看一下我们的代码:
public class Clock {
public static void main(String[] args){
System.out.println("Hello Kitty");
}
}
根据上一章我们介绍的内容,我们看到在Clock类当中定义了一个public的方法,方法名称为main,后面跟着一个参数(String[] args),这个方法的返回值是void,也就是没有返回值。另外,还有一个static,这个static是静态的意思,我们称这个为静态方法,我们后面还会详细讲述这个东西。在这里,我们需要记住的是,这个main是比较特殊的一个方法,我们称之为“入口函数”,也就是说,java在执行类的时候,首先会去找这个函数,然后再根据这个函数逐步调用其他方法,最终完成程序的执行。每一个程序都至少有一个main方法(如果有多个main方法则需要在执行的时候指定那个是主方法),否则程序将无法启动。
上面我们使用了最原始的方法来编译及运行程序,效率确实非常低,下面,我们稍微改进一下,以便后面在练习的时候可以更加方便。
首先,我们去下载一个更友好的小型编辑器EditPlus,这个编辑器比较小,不过有语法高亮、括号匹配等功能,关键是我们可以直接调用javac、java等命令,不用再每一次都通过敲命令行的方式来编译和运行。
我们使用EditPlus来打开刚才的代码:
可以看到Java保留字以及常用的类都进行了高亮显示,并且我们点击大括号会自动高亮显示与之匹配的大括号。下面,我们需要将javac、java这两个命令设置到这个工具中。
点击“工具”-“配置自定义工具”,点击“组名”将默认的“工具组1”命名为“Java工具”,然后点击“添加工具”,选择“程序”。我们可以对照之前我们执行javac的语法:
javac -d D:\JavaTest D:\JavaTest\Clock.java
然后在各栏填写信息如下:
命令:C:\Program Files\Java\jdk1.8.0_51\bin\javac.exe
参数:-d D:\JavaTest $(FilePath) 后面的$(FilePath)是文件路径
起始目录:C:\Program Files\Java\jdk1.8.0_51\bin
点击“应用”,我们就完成了javac命令的集成。接着,我们添加“java”命令,同理,对照之前的命令:
java -classpath D:\JavaTest Clock
各项设置如下:
我们用EditPlus打开Clock.java,点击“工具”下的“javac”,然后我们就可以看到D:\JavaTest多了一个Clock.class。点击“工具”下的“java”,就可以看到以下输出:
下面我们稍微改动一下代码,在代码的最上方增加一行:
package test.code1;
我们再执行javac,可以看到,原来的目录下多了一个test目录
将其打开,可以看到code1目录,在code1目录下可以扎到Clock.class字节码文件。现在,我们先删掉D:\JavaTest目录下的Clock.class文件,然后运行“工具”下面的“java”,问题来了,提示“错误: 找不到或无法加载主类 Clock”。原因是我们的java命令此时其实是变成这样子:
java -classpath D:\JavaTest Clock
由于我们的Clock路径已经改变,所以会出现找不到类的情况,那应该怎么写呢?我可以告诉大家,正确的写法应该是:
java -classpath D:\JavaTest test.code1.Clock
可以看到,这里我们在类名称之前加了包的路径,这样子java就知道我们的这个类其实是位于D:\JavaTest\test\code1目录下。其中“test.code1.Clock”我们可以将其称为一个“完整的类名”。那EditPlus当中有没有办法能够实现这个命令呢?方法是有的,我们只需稍微改动以下:
我们将“参数”部分修改以下,其中最后面我们不是跟类名,而是需要我们在运行的时候输入“类的完整路径”,运行的时候会弹出以下提示框:
我们输入类名点击“确定”就可以运行。
需要提示一下的是,很多书籍或者网络的文章都会教大家通过修改环境变量的方式来简化javac以及java命令的使用,从而可以在任意目录下执行这两个命令,不过我个人是不太建议这种做法的,毕竟那是操作系统本身的事情,Java作为一个独立的第三方程序没有必要去干涉人家的内政,守好自己的一亩三分地就可以了。更重要的是,当我们在进行真正的开发时,一般的开发工具都已经集成了JRE,我们几乎可以进行傻瓜式的开发。
[原创作品,未经授权请勿转载]