Java开发笔记(二)Java工程的帝国区划
上一篇文章介绍了如何运行了第一个Java程序“Hello World”。然而这个开发环境看起来那么陌生,一个个名字符号完全不知道它们是干啥的呀,对于初学者来说,好比天书一般,多看几眼感觉都要走火入魔了。因此接下来还是好好分析一下Java工程的总体结构,理清这些文字符号的来龙去脉才好。
话说宇宙原本一片混沌,分不清天南地北,多亏了盘古开天辟地,轻且清的物质上浮成为天空,重且浊的物质下沉变做地壳,于是才有了一个万物生长的星球。那在Java世界当中,这个星球便是工作空间,每次打开Eclipse,都会弹出启动窗口Launcher,如下图所示。
可见该窗口仅仅指定工作空间Workspace的目录路径,单击Launch按钮即可进入Eclipse的主界面。工作空间指定了一块硬盘区域,空间里的所有文件都位于该区域内部,犹如山川河流纵横于星球内。在这日月争辉的星球上,飞鸟走兽你追我跑,可是一片莽荒产生不了什么价值,还得进行开发才行。程序员作为这个星球的创造者,自然需要负责开疆拓土和建立秩序,接下来的事情就是创建国家机器了,对应到Java开发则叫做创建Java工程,每个工程都能单独运行,恰如每个国家都能单独发展一样。在Eclipse的顶部菜单栏依次选择“File”→“New”→“Project”,会弹出如下所示的项目创建窗口。
在该窗口选中“Java Project”,然后单击窗口底部的Next按钮,跳到下一个窗口页,如下图所示。
在该页面的“Project name”输入框中填写项目名称(可以理解为国家名称)。注意到输入框下方的Location目录,这便是Java工程所处的工作空间,就像这个国家位于哪个星球之上。再下面的JRE区域,可以选择不同的Java版本,版本号越大的表示版本越新越高级,好比一个国家有不同的社会发展阶段,有原始社会、奴隶社会、封建社会、资本主义社会等等,Java版本也在不断地更新换代,版本越高表示技术越进步。确认完工作空间和Java版本,接着单击窗口下方Finish按钮,完成项目创建操作。
一个国家毕竟太大了,还得划分行政区划,分而治之才管得过来,所以Java工程也要层层划分,划分后的组织机构称作“包”package。说是“包”,其实更像“树”,犹如树干到树枝到树叶这般开枝散叶。最顶层的组织,是这个国家的国体,有叫帝国com的,有叫王国net的,有叫邦国org的,还有叫书院edu的,甚是热闹。常见的Java工程,一般来自帝国时代,因此包名开头通常是com。国家政权下面,又有郡县制,抑或是省市制,总之要再分几级,故而com下面还会有xxx.xxx.xxx之类。譬如曹操是沛国谯县人,那他在东汉帝国这个Java工程里的位置是com.donghan.peiguo.qiaoxian;刘备是涿郡涿县人,那他的位置是com.donghan.zhuojun.zhuoxian;孙权是吴郡富春人,他的位置便是com.donghan.wujun.fuchun,依此类推。
有了包这种组织架构,现在可以往里面填充真材实料了,在一县土地之上,既有官府建造的城池,也有农民聚居的村落,每个聚集地都如同一个Java的代码文件。作为一座城池,首先要具备三要素,即:它归属哪个地区?它的名称是什么?它的范围有多大?一个合格的Java代码文件就要在文件内容中清楚地写明上述三个要素。以“关羽败走麦城”的麦城为例,经查史料得知,麦城在东汉时归属南郡当阳县,那么它应当位于包com.donghan.nanjun.dangyang之下。展开Java示例工程的com.donghan.nanjun.dangyang,右击它并在右键菜单中依次选择“New”→“Class”,弹出Class文件的创建窗口如下图所示。
在窗口中部的Name输入框中填写城池名称“Maicheng”,然后单击窗口底部的Finish按钮,完成代码文件Maicheng的创建操作。自动生成的代码文件内容如下所示:
- package com.donghan.nanjun.dangyang; // 东汉帝国南郡当阳县
- public class Maicheng {
- }
由以上代码可见,第一行指定了这个代码文件所处的包路径是com.donghan.nanjun.dangyang;第三行的Maicheng则表示麦城这座城池的名称,Maicheng前面的class表示城池类型;而Maicheng后面的左右花括号就是该城池的城墙了,凡是在花括号内部的代码,都属于该城池的管辖范围。
前面运行“Hello World”的时候,代码里面有个main方法,这个main方法好比城门,打开城门就能访问城里的人物了。城里有官衙、有市场、有民居,这些建筑都有围墙,也都能用花括号界定它们的区域范围。正所谓小城故事多,城里发生的事情,要一件一件记录下来,可不能弄混淆了。对每件事情、每个动作,Java代码也有相应的标点区分开来。古代每十里设置一长亭,每五里有一短亭,供行人何处,亲友远行常在此话别。这个分隔用的长亭,对应Java代码里面的冒号,而短亭则对应Java代码的逗号。有了逗号和冒号,Java代码讲起故事来方能井井有条、头头是道。
下面来个具体的Java代码例子,东汉建安九年(204年),曹操平定袁绍势力后,开始在魏郡邺县营建邺城,由此拉开了邺城作为六朝古都的序幕。邺城共有七个城门,其中正南门名叫凤阳门,城内建筑最有名的当数铜雀台,另有金虎台、冰井台与之齐名。现在给邺城创建对应的代码文件Yecheng.java,并把它放在魏郡邺县这个包下,也就是com.donghan.weijun.yexian这个package之下。游客从凤阳门这个main方法进入邺城,一路先后参观了铜雀台、金虎台和冰井台,游览路线是tongquetai→jinhutai→bingjingtai。这样便勾勒出Yecheng(邺城)这座城池的大概风貌了,详细的Java代码例子如下所示:
- package com.donghan.weijun.yexian; // 东汉帝国魏郡邺县
- public class Yecheng {
- public static void tongquetai() {
- System.out.println("这里是铜雀台。");
- }
- public static void jinhutai() {
- System.out.println("这里是金虎台。");
- }
- public static void bingjingtai() {
- System.out.println("这里是冰井台。");
- }
- public static void main(String[] args) {
- System.out.println("欢迎来到魏国的都城——邺城。");
- System.out.println("这里是邺城的正南门——凤阳门。");
- tongquetai(); // 参观朱雀台
- jinhutai(); // 参观金虎台
- bingjingtai(); // 参观冰井台
- }
- }
接着在该代码文件内部右击,并在右键菜单中依次选择“Run As”→“Java Application”,表示运行这段Java代码。运行结果可以在界面下方的Console窗口中观察,如下图所示。
由此可见游客从凤阳门进入邺城,依次参观了铜雀台、金虎台、冰井台几个景点。看起来代码逻辑的主要意思都在了,细节上面可能有一些陌生的地方,不过不用担心,后面的文章将会逐步拨开迷雾。
Java开发笔记(二)Java工程的帝国区划的更多相关文章
- Java学习笔记二:Java开发工具Eclipse的安装与使用
Java开发工具Eclipse的安装与使用 正如office一样我们在开发java语言过程中同样需要依款不错的开发工具,目前市场上的IDE很多,这里只演示Eclipse的安装: 一:下载软件: 1.下 ...
- Java开发笔记(一百零二)信号量的请求与释放
前面介绍了同步与加锁两种并发处理机制,虽然加锁比起同步要灵活一些,但是加锁在某些高级场合依然力有未逮,包括但不限于下列几点:1.某块代码被加锁之后,对其它线程而言就处于繁忙状态,缺乏弹性的阈值范围:2 ...
- Java开发笔记(一百二十五)AWT图像加工
前面介绍了如何使用画笔工具Graphics绘制各种图案,然而Graphics并不完美,它的遗憾之处包括但不限于:1.不能设置背景颜色:2.虽然提供了平移功能,却未提供旋转功能与缩放功能:3.只能在控件 ...
- Java开发笔记(八十二)注解的基本单元——元注解
Java的注解非但是一种标记,还是一种特殊的类型,并且拥有专门的类型定义.前面介绍的五种内置注解,都可以找到对应的类型定义代码,例如查看注解@Override的源码,发现它的代码定义是下面这样的: @ ...
- Java开发笔记(三)Java帝国的特种官吏
上一篇文章介绍了Java工程的帝国区划,末尾给出了一段Java代码例子,这个代码虽然勉强能看懂,但是有些细节令人不甚了了.比如说“// 参观朱雀台”为何能够直接跟在当前行后面?“System.out. ...
- Java开发笔记(二十三)数组工具Arrays
数组作为一种组合形式的数据类型,必然要求提供一些处理数组的简便办法,包括数组比较.数组复制.数组排序等等.为此Java专门设计了Arrays工具,该工具包含了几个常用方法,方便程序员对数组进行加工操作 ...
- Java开发笔记(二十四)方法的组成形式
经过前面的学习,我们发现演示的Java代码越来越复杂,而且每个例子的代码都堆在入口方法main内部,这会导致如下问题:1.一个方法内部堆砌了太多的代码行,看着费神,维护起来也吃力:2.部分代码描述的是 ...
- Java开发笔记(二十五)方法的输入参数
前面通过main方法介绍了方法的定义形式,对于方法的输入参数来说,还有几个值得注意的地方,接下来分别对输入参数的几种用法进行阐述.一个方法可以有输入参数,也可以没有输入参数,倘若无需输入参数,则方法定 ...
- Java开发笔记(二十六)方法的输出参数
前面介绍了方法的输入参数,与输入参数相对应的则为输出参数,输出参数也被称作方法的返回值,意思是经过方法的处理最终得到的运算数值.这个返回值可能是整型数,也可能是双精度数,也可能是数组等其它类型,甚至允 ...
- Java开发笔记(二十七)数值包装类型
方法的出现缘起优化代码结构,但它的意义并不局限于此,正因为有了方法定义,编程语言才更像一门能解决实际问题的工具,而不仅仅是只能用于加减乘除的计算器.在数学的发展过程中,为了表示四则运算,人们创造了加减 ...
随机推荐
- 30、vue 过滤器(filters)
filter Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持).过滤器应该被添加在 Ja ...
- 在C++中,setw(int n)
setw(int n)用来控制输出间隔例如:cout<<'s'<<setw(8)<<'a'<<endl;则在屏幕显示s a //s与a之间 ...
- Winsock编程基继承基础(网络对时程序)
#include <iostream> #include <stdio.h> #include "InitSock.h" using namespace s ...
- js 中 的 BOM对象
BOM对象(浏览器对象模型 Browser Object Model) 01.页面的前进和后退 02.移动,调整和关闭浏览器窗口 03.创建新的浏览器窗口 01.window对象 ***** 核心对象 ...
- libguestfs手册(2):guestfish command
添加一个drive:guestfs_add_drive_opts add-drive filename [readonly:true|false] [format:..] [iface:..] [na ...
- 算法与数据结构(十二) 散列(哈希)表的创建与查找(Swift版)
散列表又称为哈希表(Hash Table), 是为了方便查找而生的数据结构.关于散列的表的解释,我想引用维基百科上的解释,如下所示: 散列表(Hash table,也叫哈希表),是根据键(Key)而直 ...
- [Swift]LeetCode253.会议室 II $ Meeting Rooms II
Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],...] (si ...
- [Swift]LeetCode993. 二叉树的堂兄弟节点 | Cousins in Binary Tree
In a binary tree, the root node is at depth 0, and children of each depth k node are at depth k+1. T ...
- vue框架中的Axios封装
function axios(options) { let promise = new Promise((resolve, reject) => { var xhr ...
- python之定义参数模块argparse(二)高级使用 --传参为函数的实现
我们在文章python之定义参数模块argparse的基本使用中介绍了argparse模块的基本使用方法 当前传入的参数只能是int.str.float.comlex类型,不能为函数,这有点不方便,但 ...