JAVA精灵 第五章 兄弟们,咱动手吧!

经过前面几章的讲述,相信大家已经对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这个路径,安装完成后共看到两个文件夹(具体名称跟你选择的版本有关):

Paste_Image.png

细心的你可能会发现,在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

Paste_Image.png

编写完代码之后,我们需要对代码进行编译,我们需要用到的编译器就是位于jdk1.8.0_51\bin目录下的javac.exe,这是一个Dos程序,因此我们需要进入Dos界面来运行。我们直接在命令行输入javac,可以看到如下的提示:

Paste_Image.png

上面的第一行“用法”已经告诉了我们如何使用这个命令,中间是可选的选项,最后是源文件路径,我们在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命令,通过执行这个命令,我们可以启动虚拟机并执行我们的程序。同样方法,我们看一下这个命令的用法:

Paste_Image.png

参照第一行“用法”的提示,我们输入以下命令:

Paste_Image.png

这个命令当中,-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来打开刚才的代码:

Paste_Image.png

可以看到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

Paste_Image.png

点击“应用”,我们就完成了javac命令的集成。接着,我们添加“java”命令,同理,对照之前的命令:
java -classpath D:\JavaTest Clock
各项设置如下:

Paste_Image.png

我们用EditPlus打开Clock.java,点击“工具”下的“javac”,然后我们就可以看到D:\JavaTest多了一个Clock.class。点击“工具”下的“java”,就可以看到以下输出:

Paste_Image.png

下面我们稍微改动一下代码,在代码的最上方增加一行:

package test.code1;

我们再执行javac,可以看到,原来的目录下多了一个test目录

Paste_Image.png

将其打开,可以看到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当中有没有办法能够实现这个命令呢?方法是有的,我们只需稍微改动以下:

Paste_Image.png

我们将“参数”部分修改以下,其中最后面我们不是跟类名,而是需要我们在运行的时候输入“类的完整路径”,运行的时候会弹出以下提示框:

Paste_Image.png

我们输入类名点击“确定”就可以运行。

需要提示一下的是,很多书籍或者网络的文章都会教大家通过修改环境变量的方式来简化javac以及java命令的使用,从而可以在任意目录下执行这两个命令,不过我个人是不太建议这种做法的,毕竟那是操作系统本身的事情,Java作为一个独立的第三方程序没有必要去干涉人家的内政,守好自己的一亩三分地就可以了。更重要的是,当我们在进行真正的开发时,一般的开发工具都已经集成了JRE,我们几乎可以进行傻瓜式的开发。

[原创作品,未经授权请勿转载]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,580评论 1 114
  • 今天说什么神话,明天传什么佳话,最后我们看到的往往是笑话。 对于往事,总要在记忆中清空一些。你说是背叛,我说是减负...
    白发老蘭阅读 1,009评论 6 34
  • 我认识Y先生的时候,他正甩开了膀子跟一堆人骂仗。以一敌百,文武皆用,我先是在心里嫌弃了他三分。不管现实生活里还是虚...
    四小姐的家阅读 941评论 1 1