好好学Java:从零基础到项目实战
上QQ阅读APP看书,第一时间看更新

1.4.3 Java的度量衡

秦始皇统一中国之后,实行“书同文,车同轨”,把货币和各种度量衡统一起来,从而缔造了一个秩序井然的帝国。既然统一度量衡是每个帝国都要做的事情,Java帝国也不例外,对于初学者来说,只有认识了Java帝国的各种度量衡,才能更好地入乡随俗。

1.Java帝国的人名称呼

若想在一个国家与当地人沟通交流,首先要理解当地的语言以及对人的称呼。在计算机世界里,Java帝国的编程语言主要采用英文字母书写,另外包括阿拉伯数字与半角的标点符号。至于各种实体的名称,则基本遵守以下的命名规范(非强制性,建议遵守):

(1)工作空间的名称:由英文字母、数字与下画线组成,推荐以字母开头。

(2)项目Project的名称:由英文字母、数字与下画线组成,推荐以大写字母开头。

(3)包package的名称:各层级的名称以点号分隔,每个层级的名称推荐采用小写字母。

(4)类Class的名称:由字母和数字组成,并且以大写字母开头。这很好理解,堂堂一座城池的大名当然开头要大写。

(5)方法的名称:由字母、数字和下画线组成,并且以小写字母开头。

(6)变量(其值允许修改)的名称:由字母、数字和下画线组成,并以小写字母开头。

(7)常量(其值不允许修改)的名称:由字母、数字和下画线组成,以大写字母开头并且里面的字母全为大写。

此外,代码的格式与对齐也很重要,规范的代码排版看起来使人舒服,也能提高编码效率。当然,这种排版工作无须开发者在编码时特别关注,可以在输入完一段代码后,再命令IDEA自动格式化代码。这个代码格式化操作有以下几个途径可以完成:

(1)依次选择顶部菜单栏的Code→Reformat Code,即可对选中代码自动格式化。

(2)在主界面左侧的项目结构中右击某个package,并选择右键菜单中的Reformat Code,即可格式化该包下的所有代码。

2.Java帝国的记数方式

数字的进制是一个重要的度量衡,由于人类的双手一共有10根手指,因此大部分文明的数制都是十进制,只有少量文明例外,比如巴比伦文明的楔形数字为60进制,而玛雅文明则为20进制。计算机行业的半导体在接通状态时表示1,在断开状态时表示0,故而计算机的数制采取二进制。显然二进制的数字不易为常人所理解,于是编程语言通常会再引入十进制、十六进制乃至八进制的数制表达。Java语言固然也不例外,话虽如此,但又如何证明Java帝国的基础数制是二进制呢?

接下来,使用Java代码做一个实验,看看Java代码的基础数制究竟为何?为开展该实验,会用到一种位运算符,位运算符主要包括两个操作符:其一为左移操作符“<<”,其二为右移操作符“>>”。所谓左移右移,就是把数字往高位移动或者往低位移动。譬如数字80,把它左移一位,则表示将该数字整体向高位挪动一格,末位空的地方补0,于是数字80左移一位就变成了800。若把数字80右移一位,则表示将该数字整体向低位挪动一格,挪走的末位直接略去,于是数字80右移一位就变成了8。上面说的数字80左移一位变800、右移一位变8其实是基于十进制数字的前提,倘若原始数字的基础数制并非十进制,那么左移和右移的结果将迥然不同。

现在有一个十进制的数字8,换算成二进制数为00001000。如果Java的基础数制为十进制,数字8左移一位的结果就是80;如果Java的基础数制为二进制,00001000左移一位的结果就是00010000,移动后的二进制数换算成十进制则为16。这样的话,数制实验只需观察左移和右移后的结果数字,即可验证当前环境采用的是哪一种基础数制。下面的测试代码便是检验左移与右移结果的例子:

package com.donghan.test;
 
public class Number {
    public static void main(String[] args) {
        int x=8;        // 8对应的二进制数为00001000
        int y=x << 2;  // 00001000左移两位后变成00100000,左移结果转换成十进制则为32
        int z=x >> 2;  // 00001000右移两位后变成00000010,右移结果转换成十进制则为2
        System.out.println("原始数字x="+x);
        System.out.println("x左移两位后="+y);
        System.out.println("x右移两位后="+z);
    }
}

右击该代码,并选择右键菜单的Run 'Number.main()'命令,执行Number程序。主界面下方的Run窗口的日志输出如下:

原始数字x=8

x左移两位后=32

x右移两位后=2

可见数字8左移两位后的结果是32,右移两位后的结果是2,从而印证了二进制是Java帝国的基础数制。

3.Java帝国的纪年开端

一个帝国除了制定响亮的国号,还要更换年号,以便社会生活通过纪年表达时间的先后顺序。例如,现代社会采用的公元纪年是以耶稣诞生之年作为纪年的开始;而东汉末年常见的建安年号则以曹操奉迎汉献帝到许昌为开端(也就是著名的“挟天子以令诸侯”),像官渡之战发生于建安五年,赤壁之战发生于建安十三年。那么Java作为美国人发明的编程语言,它是否也采用西方通行的公元纪年呢?

要想获取Java帝国的纪年倒也不难,只要引入系统日期库中的Date工具就能实现。Date工具提供了一个getYear方法,利用该方法即可得知指定日期的年份是什么。因而检验Java的纪年方式可分解为以下两个步骤:

(1)获取当前日期。

(2)根据当前日期调用getYear方法得到当前年份。

根据上述两个验证步骤,下面的测试代码给出了具体的演示例子:

package com.donghan.test;
 
import java.util.Date;  // 引入系统库中的Date工具
 
public class Year {
    public static void main(String[] args) {
        Date date=new Date();          // 创建一个当前日期的实例
        int year=date.getYear();      // 从当前日期中获取当前年份
        System.out.println("year="+year);
    }
}

右击该代码,并选择右键菜单的Run 'Year.main()'命令,执行Year程序,此时Run窗口的日志结果如下:

year=119

观察输出的日志结果为“year=119”,并非当前时间的公元纪年2019,这个2019减去119等于1900,原来Java帝国是以公元1900年为开端的。由此可见,编程世界自有一套规矩,初学者得小心谨慎,切不可自以为是。