上一篇文章介绍了Java工程的帝国区划,末尾给出了一段Java代码例子,这个代码虽然勉强能看懂,但是有些细节令人不甚了了。比如说“// 参观朱雀台”为何能够直接跟在当前行后面?“System.out.println”又为何被点号绕了三道湾?显然这里面必定有一些规则需要遵守,好比到了一个国家就要入乡随俗,为了方便游客更好更快地适应当地的风俗,Java帝国特别设立了几个特殊官职,专门负责对内对外打交道的事情。其中有几个官吏经常露面,尤其需要初学者注意,他们是:翻译官、太史公、贸易官,接下来分别介绍如何与它们打招呼。

翻译官
Java代码其实由一行一行的符号组成,跟通俗易懂的自然语言没法比,因为Java只是一种计算机编程的高级语言,它的代码逻辑是给电脑看的,不是给普通人看的,所以初学者不要指望马上就能看懂Java代码。到了异国他乡,面对周围的鸟语叽喳,啥都听不懂可不是办法,最好能找个翻译,把这群老外说的鸟语翻译成你我熟知的母语,这样才好待下来学习和生活。Java帝国里面也有类似的翻译官,大名叫做“注释”,意思就是在代码里添加一行或者一段说明性的文字,这些说明文字对程序运行不起任何作用,仅仅是方便初学者理解Java代码的功能作用。
像前面代码里面的“// 参观朱雀台”,开头的两个双斜杆“//”便是注释的标记符号,它表示当前行在双斜杆之后的内容都属于注释文字,可以随便写开发者的母语文本,反正不会影响Java程序的编译和运行。双斜杆的注释规则有两条,其一为:它只注释后面的文字,不注释前面的文字;其二为:它只对当前行有效,对上一行和下一行都是无效的。因此,如果要添加多行的说明文字,就得在每行文字开头都加上双斜杆符号。下面是给Java代码添加多行注释的例子:

		// 先参观朱雀台
// 再参观金虎台
// 最后参观冰井台

然而每行文字前面都要开发者手工输入双斜杆,实在是有点兴师动众,为减少开发者的工作量,有两个办法可以避免重复的手工输入。第一个办法,先用鼠标选中需要注释的数行文本,再依次选择Eclipse顶部菜单的“Source”→“Toogle Comment”,此时Eclipse瞬间在这几行文字开头都加上了双斜杆。第二个办法,是采用Java代码的多行注释标记,这个多行注释,需要一个标记头和一个标记尾,那么夹在头尾标记中间的文字,即为被注释了的文本内容了。所谓的标记头,由符号“/*”组成,而标记尾则由符号“*/”组成,二者之间可以有单行文字,也可以有多行文字。如果头尾标记包括注释文字都在同一行,那么该行的完整注释形如“/* 这里是注释文字 */”。如果头尾标记连同注释文字分散成多行排列,那么完整的多行注释格式是下面这种形式:

		/* 先参观朱雀台
再参观金虎台
最后参观冰井台 */

注释标记与说明文本之间的空格没有实际意义,仅仅是看过去显得不那么拥挤罢了。由于双斜杆表达的注释一般言简意赅,不会太啰嗦,因此本系列的文章主要采取双斜杆对说明文字加以注释。

太史公
程序员写完代码之后,运行程序之时经常要检查运行过程是否符合预期,这就要求程序能够自动汇报运行情况,以便开发者事后分析整个运行过程的经过。或者说,小到一个人每天写日记,大到一个国家编史书,总之该工作好比史官(又称太史公)辛勤地记载各类史实,计算机程序的史料学名就称作“日志”。程序把自身的运行信息输出到控制台(Console窗口)或者输出到文件中,便构成了程序的运行日志。最简单的日志输出代码如下所示:

		System.out.println("欢迎来到魏国的都城——邺城。");

从以上代码可见,输出日志的方法是“System.out.println”,最前面的System表示这里在进行系统操作,中间的out表示向控制台输出信息;最后面的println表示打印括号内的文本,并跳到下面一行,末尾的ln是line的缩写。如果把最后面的println改成print,那么打印完括号内的文本之后,当前定位在该行文本的末尾,而不会跳到下一行的开头。下面演示看看println和print区别,先用System.out.println打印两句话,代码示例如下:

		System.out.println("欢迎来到魏国的都城——邺城。");
System.out.println("这里是邺城的正南门——凤阳门。");

此时控制台输出的日志信息如下图所示:

再用System.out.print打印同样的两句话,代码示例如下:

		System.out.print("欢迎来到魏国的都城——邺城。");
System.out.print("这里是邺城的正南门——凤阳门。");

此时控制台输出的日志信息如下图所示:

由此可见,通过println打印的日志内容是分行显示的,而通过print打印的日志都显示在同一行。

既然调用System.out可以往控制台输出日志,那么反过来,调用System.in也可以从控制台向程序输入信息。只不过输入文字的接收要分以下两个步骤:
1、创建一个控制台的扫描器,随时盯着控制台的输入操作,扫描器的创建代码如下所示:

		Scanner scan = new Scanner(System.in); // 从控制台接收输入文本

2、通过扫描器的nextLine方法获得一行输入文字,按下回车键表示该行文字输入完毕。
下面举个从控制台获取输入信息的例子,曹操任命张辽镇守合肥,而孙权亲率大军进攻合肥,张辽在逍遥津之战中杀得东吴众将丢盔弃甲。现在往控制台输入向张辽挑战的吴国将领姓名,看看都有谁前来应战,完整的代码示例如下:

package com.donghan.huainan.hefei; // 东汉帝国淮南郡合肥县

import java.util.Scanner;

public class Hefei {

	public static void main(String[] args) {
System.out.print("这里是张辽镇守的合肥城,吴国谁来挑战?");
Scanner scan = new Scanner(System.in); // 从控制台接收输入文本
/* nextLine方法表示接收一行文字,以回车键结尾 */
System.out.println("吴国前来挑战的将领是:"+scan.nextLine());
}
}

接着通过右键菜单“Run As”→“Java Application”运行Hefei程序,并在控制台敲入“甘宁”,然后按下回车键。键盘输入前后的控制台截图如下所示,可见程序成功读取到了控制台的输入文字。

贸易官
帝国物产丰盈,各地都有闻名遐迩的土特产,比如曹操南征宛城张绣,结果反遭张绣暗算,致使大将典韦阵亡,这个宛城便是汉代最大的冶铁中心。此外,蜀汉的成都平原盛产蜀锦,而东吴的景德镇则盛产陶瓷。既然各地出产多种多样,不妨互通有无,大家做个贸易,你卖你的,我卖我的,各取所需,皆大欢喜。这个进出口贸易,就由专门的贸易官来掌管。贸易官既负责出口商品,也负责进口商品。对于出口贸易来说,需要区分哪些地方是对外开放城市,又有哪些货物是允许出口的普通商品。
对外开放在Java代码中使用关键字public来表达,凡是被public前缀修饰了的城池,都是对外开放城市,凡是被public前缀修饰了的东西,都是允许出口的货物。譬如下面的代码例子,指定了宛城是座对外开放城市,并且当地出产的铁器也是可供出口的货物。

package com.donghan.nanyang.wanxian; // 东汉帝国南阳郡宛县

public class Wancheng {

	public static void getIron() {
System.out.println("从宛城得到了一大批的铸铁兵器。");
} public static void main(String[] args) {
System.out.println("欢迎来到大汉的冶铁中心——宛城。");
}
}

现在其它地方想要进口宛城的铁器,就得通过贸易官开展进口贸易。贸易官首先通过关键字import说明将要从某地进口商品,就像如下代码这般表示:

import com.donghan.nanyang.wanxian.Wancheng; // 准备从宛城进口商品

然后在具体运行的代码段中添加来自Wancheng(宛城)的贸易进口代码。再举个例子,想当年关羽大举北伐,消息传到襄阳,曹军主将曹仁赶忙从宛城进口了一批铁质兵器,意图加强军备抵抗蜀军。这样的话,Xiangyang(襄阳)这个地方,需要声明import(进口)来自Wancheng(宛城)的铁器。于是完整的Xiangyang城代码如下所示:

package com.donghan.nanjun.xiangyang; // 东汉帝国南郡襄阳县

import com.donghan.nanyang.wanxian.Wancheng; // 准备从宛城进口商品

public class Xiangyang {

	public static void main(String[] args) {
System.out.println("这里是华夏第一城池——襄阳城。");
Wancheng.getIron(); // 开展从宛城进口铁器的贸易
}
}

最后仍旧通过右键菜单“Run As”→“Java Application”运行Xiangyang程序,程序运行结果如下图所示。

可见Wancheng(宛城)的铁器被进口到了Xiangyang(襄阳),用编程的专业术语来说,是Xiangyang这个类调用了Wancheng那个类的getIron方法。

Java开发笔记(三)Java帝国的特种官吏的更多相关文章

  1. Java 学习笔记 (三) Java 日期类型

    以下内容摘自:  https://www.cnblogs.com/crazylqy/p/4172324.html import java.sql.Timestamp; import java.text ...

  2. Java学习笔记三:Java的变量、常量、变量的类型及使用规则

    Java的变量.常量.变量的类型及使用规则 每一种语言都有一些具有特殊用途的词,Java也不例外,它们被称为关键字.关键字对 Java 的编译器有着特殊的意义. 一:Java中的关键字: 注:Java ...

  3. Java开发笔记(三十)大小数BigDecimal

    前面介绍的BigInteger只能表达任意整数,但不能表达小数,要想表达任意小数,还需专门的大小数类型BigDecimal.如果说设计BigInteger的目的是替代int和long类型,那么设计Bi ...

  4. Java开发笔记(三十一)字符类型的表达

    前面介绍的Java编程,要么是与数字有关的计算,要么是与逻辑有关的推理,充其量只能实现计算器和状态机.若想让Java运用于更广阔的业务领域,就得使其支撑更加血肉丰满的业务场景,而丰满的前提是能够表达大 ...

  5. Java开发笔记(三十四)字符串的赋值及类型转换

    不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工.为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类 ...

  6. Java开发笔记(三十五)字符串格式化

    前面介绍了字符串变量的四种赋值方式,对于简单的赋值来说完全够用了,即便是两个字符串拼接,也只需通过加号把两个目标串连起来即可.但对于复杂的赋值来说就麻烦了,假设现在需要拼接一个很长的字符串,字符串内部 ...

  7. Java开发笔记(三十六)字符串的常用方法

    不管是给字符串赋值,还是对字符串格式化,都属于往字符串填充内容,一旦内容填充完毕,则需开展进一步的处理.譬如一段Word文本,常见的加工操作就有查找.替换.追加.截取等等,按照字符串的处理结果异同,可 ...

  8. Java开发笔记(三十七)利用正则串分割字符串

    前面介绍了处理字符串的常用方法,还有一种分割字符串的场景也很常见,也就是按照某个规则将字符串切割为若干子串.分割规则通常是指定某个分隔符,根据字符串内部的分隔符将字符串进行分割,例如逗号.空格等等都可 ...

  9. Java开发笔记(三十八)利用正则表达式校验字符串

    前面多次提到了正则串.正则表达式,那么正则表达式究竟是符合什么定义的字符串呢?正则表达式是编程语言处理字符串格式的一种逻辑式子,它利用若干保留字符定义了形形色色的匹配规则,从而通过一个式子来覆盖满足了 ...

  10. Java开发笔记(三十九)日期工具Date

    Date是Java最早的日期工具,编程中经常通过它来获取系统的当前时间.当然使用Date也很简单,只要一个new关键字就能创建日期实例,就像以下代码示范的那样: // 创建一个新的日期实例,默认保存的 ...

随机推荐

  1. Java课堂笔记(零):内容索引

    回想自己学习和使用Java的时间也是很长了.本科期间课堂上浅尝辄止地学习了点皮毛,后来也是搁置不用,未曾深入研究.研究生期间因为项目和实习的原因,基本算是重新拾起Java这门语言,并且接触到了Spri ...

  2. 下载 mysql 数据库 的步骤 完整版

    1. 官网(点这里)上下载 2. 3. 4. 5. 6. 7.

  3. Deployment Characteristics of "The Edge" in Mobile Edge Computing

    移动边缘计算中的“边缘”部署特性 本文为SIGCOMM 2018 Workshop (Mobile Edge Communications, MECOMM)论文. 本文翻译了论文的关键内容. 摘要 移 ...

  4. 【RL-TCPnet网络教程】第20章 RL-TCPnet之BSD Socket客户端

    第20章      RL-TCPnet之BSD Socket客户端 本章节为大家讲解RL-TCPnet的BSD Socket,学习本章节前,务必要优先学习第18章的Socket基础知识.有了这些基础知 ...

  5. [Swift]LeetCode677. 键值映射 | Map Sum Pairs

    Implement a MapSum class with insert, and sum methods. For the method insert, you'll be given a pair ...

  6. Redis面试题

    1.谈谈Redis的主从复制流程 有几个重点:主节点负责写,从节点负责读,slave node 主要用来进行横向扩容,做读写分离,扩容的 slave node 可以提高读的吞吐量.必须开启 maste ...

  7. Python Matplotlib.pyplot plt 中文显示

    话不多说,上代码 # -*- coding: UTF-8 -*- import matplotlib.pyplot as plt from matplotlib.font_manager import ...

  8. Python内置函数(29)——help

    英文文档: help([object]) Invoke the built-in help system. (This function is intended for interactive use ...

  9. ASP.NET Core 2.0 MVC - 获取当前登录用户信息

    一.前言 上篇实战完成后,没想到会有那么多的圈友给了那么多的支持,甚至连只是作为代码仓储的git上也给了一些小星星,真的感觉很惶恐啊,哈哈哈,毕竟代码写的很烂啊.由于上一篇只是大概说了下项目,所以准备 ...

  10. 死磕 java集合之ArrayList源码分析

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 ArrayList是一种以数组实现的List,与数组相比,它具有动态扩展的能力,因此也可 ...