Java开发笔记(四)Java帝国的度量衡
秦始皇统一中国之后,实行“书同文,车同轨”,把货币和各种度量衡都统一起来,从而缔造了一个秩序井然的帝国。既然统一度量衡是每个帝国都要做的事情,Java帝国也不例外,对于人生地不熟的初学者来说,只有认识了Java帝国的各种度量衡,才能更好地入乡随俗。
Java帝国的人名称呼
若想在一个国家与当地人沟通交流,首先要理解当地的语言以及对人的称呼。在计算机世界里,Java帝国的编程语言主要采用英文字母书写,另外包括阿拉伯数字与半角的标点符号。至于各种实体的名称,则基本遵守以下的命名规范(非强制性,建议遵守):
1、工作空间workspace的名称:由英文字母、数字与下划线组成,工作空间名称建议用字母开头。
2、项目Project的名称:由英文字母、数字与下划线组成,项目名称建议用大写字母开头。
3、包package的名称:各层级的名称用点号分隔,每个层级的名称建议采用小写字母书写。
4、Class的名称:建议由字母和数字组成,并且用大写字母开头。这很好理解,堂堂一座城池的大名当然开头要大写。
5、方法的名称:建议由字母、数字和下划线组成,并且用小写字母开头。
6、变量(其值允许修改)的名称:建议由字母、数字和下划线组成,并且用小写字母开头。
7、常量(其值不允许修改)的名称:建议由字母、数字和下划线组成,用大写字母开头并且里面的字母全为大写。
此外,代码的格式与对齐也很重要,规范的代码排版看起来使人舒服,也能提高编码效率。当然这种排版工作无需开发者在编码时特别关注,可以在敲完一段代码后,再命令Eclipse自动进行代码格式化动作。这个代码格式化操作有以下几个途径可以完成:
1、依次选择顶部菜单栏的“Source”→“Format”,即可对选中代码自动格式化。
2、在主界面左侧项目结构中右击某个package,并依次选择右键菜单的“Source”→“Format”,即可对该包下的所有代码进行格式化。
3、在代码文件内部右击,并依次选择右键菜单的“Source”→“Format”,即可格式化该代码文件。
Java帝国的记数方式
数字的进制是又一个重要的度量衡,由于人类的双手一共有十根手指,因此大部分文明的数制都是十进制,只有少量文明是例外,比如巴比伦文明的楔形数字为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。这样的话,数制实验只需观察左移和右移后的结果数字,即可验证当前环境采用的是哪一种基础数制。下面的测试代码便是检验左移与右移结果的例子:
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 As”→“Java Application”,命令执行Number程序,主界面下方Console窗口的日志输出情况如下图所示。

可见数字8左移两位后的结果是32,右移两位后的结果是2,从而印证了二进制是Java帝国基础数制的说法。
Java帝国的纪年开端
一个帝国除了制定响亮的国号,还要更换年号,以便社会生活通过纪年表达时间的先后顺序。例如,现代社会采用的公元纪年,是以耶稣诞生之年作为纪年的开始;而东汉末年常见的建安年号,则以曹操劫持汉献帝到许昌为开端(也就是著名的“挟天子以令诸侯”),像官渡之战发生于建安五年,赤壁之战发生于建安十三年。那么Java作为美国人发明的编程语言,它是否也采用西方通行的公元纪年呢?
要想获取Java帝国的纪年倒也不难,只要引入系统日期库中的Date工具就能实现。Date工具提供了一个getYear方法,利用该方法即可得知指定日期的年份是什么。因而检验Java的纪年方式可分解为以下两个步骤:
1、获取当前日期。
2、根据当前日期调用getYear方法得到当前年份。
根据上述两个验证步骤,下面的测试代码给出了具体的演示例子:
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 As”→“Java Application”,命令执行Year程序,此时Console窗口的日志如下图所示。

观察输出的日志结果为“year=118”,并非当前时间的公元纪年2018,这个2018减去118等于1900,原来Java帝国是以公元1900年为开端的呀。由此可见,编程世界自有一套规矩方圆,初学者得小心谨慎,切不可自以为然。
Java开发笔记(四)Java帝国的度量衡的更多相关文章
- Java学习笔记四:Java的八种基本数据类型
Java的八种基本数据类型 Java语言提供了八种基本类型.六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型. Java基本类型共有八种,基本类型可以分为三类,字符类型char,布 ...
- Java 学习笔记 (四) Java 语句优化
这个问题是从headfirst java看到的. 需求: 一个移动电话用的java通讯簿管理系统,要求最有效率的内存使用方法. 下面两段程序的优缺点,哪个占用内存更少. 第一段: Contact[]c ...
- Java开发笔记(四十五)成员属性与成员方法
前面介绍了许多数据类型,除了基本类型如整型int.双精度型double.布尔型boolean之外,还有高级一些的如包装整型Integer.字符串类型String.本地日期类型LocalDate等等,那 ...
- Java开发笔记(三十四)字符串的赋值及类型转换
不管是基本的char字符型,还是包装字符类型Character,它们的每个变量只能存放一个字符,无法满足对一串字符的加工.为了能够直接操作一连串的字符,Java设计了专门的字符串类型String,该类 ...
- Java开发笔记(四十二)日历工具的常见应用
前面介绍了日历工具Calendar的基本用法,乍看起来Calendar与Date两个半斤八两,似乎没有多大区别,那又何苦庸人自扰鼓捣一个新玩意呢?显然这样小瞧了Calendar,其实它的作用大着呢,接 ...
- Java开发笔记(一百零四)普通线程池的运用
前面介绍了线程的基本用法,以及多线程并发的问题处理,但实际开发中往往存在许多性质相似的任务,比如批量发送消息.批量下载文件.批量进行交易等等.这些同类任务的处理流程一致,不存在资源共享问题,相互之间也 ...
- Java开发笔记(九十四)文件通道的性能优势
前面介绍了字节缓存的一堆概念,可能有的朋友还来不及消化,虽然文件通道的用法比起传统I/O有所简化,可是平白多了个操控繁琐的字节缓存,分明比较传统I/O更加复杂了.尽管字节缓存享有缓存方面的性能优势,但 ...
- Java开发笔记(一百三十四)Swing的基本对话框
桌面程序在运行过程中,时常需要在主界面之上弹出小窗,把某种消息告知用户,以便用户及时知晓并对症处理.这类小窗口通常称作对话框,依据消息交互的过程,可将对话框分为三类:消息对话框.确认对话框.输入对话框 ...
- Java开发笔记(八十四)文件与目录的管理
程序除了处理内存中的数据结构,还要操作磁盘上的各类文件,这里的磁盘是个统称,泛指可以持久保留数据的存储介质,包括但不限于:插在软驱中的软盘.固定在机箱中的硬盘.插在光驱中的光盘.插在USB接口上的U盘 ...
- Java开发笔记(二十四)方法的组成形式
经过前面的学习,我们发现演示的Java代码越来越复杂,而且每个例子的代码都堆在入口方法main内部,这会导致如下问题:1.一个方法内部堆砌了太多的代码行,看着费神,维护起来也吃力:2.部分代码描述的是 ...
随机推荐
- Android Gradle Task-中文
任务可以从根项目运行 Android 任务 androidDependencies-显示项目的Android依赖项 signingReport-显示基础和测试模块的签名信息 sourceSets-打印 ...
- Vue 中动态添加class(使用v-bind:class)
今天在Vue中动态修改类名,元素的样式就是不改变,类名也没有加上去,里面的问题具体我还是不太清楚,有可能是因为自己不认真,把 :class= 后面的内容的格式给整错了,下面将正确的做法记录一下,便于以 ...
- C语言复习3_条件结构
if条件结构 if else 结构一般处理区间情况 #include <stdio.h> #include <stdlib.h> int main() { //打印剧情 dou ...
- Meltdown Attack
1. 引言 2018年1月3日,Google Project Zero(GPZ)团队安全研究员Jann Horn在其团队博客中爆出CPU芯片的两组漏洞,分别是Meltdown与Spectre. Mel ...
- linux下SS 网络命令详解
ss命令用来显示处于活动状态的套接字信息. ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容. 但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比n ...
- 算法与数据结构(十二) 散列(哈希)表的创建与查找(Swift版)
散列表又称为哈希表(Hash Table), 是为了方便查找而生的数据结构.关于散列的表的解释,我想引用维基百科上的解释,如下所示: 散列表(Hash table,也叫哈希表),是根据键(Key)而直 ...
- leetcode-比特位计数
一.题目描述 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 ...
- Redis的7个应用场景
一:缓存——热数据 热点数据(经常会被查询,但是不经常被修改或者删除的数据),首选是使用redis缓存,毕竟强大到冒泡的QPS和极强的稳定性不是所有类似工具都有的,而且相比于memcached还提供了 ...
- 字符串----hiho字符串(尺取法)
注意:这道题的解法和最短摘要一样,都是采用尺取法解决问题,注意这儿题目要求恰好包含,也就是说这个hiho字符串必须包含2个'h'.1个'i'和1个'o'.一个不能多,一个也不能少. import ja ...
- i春秋官网4.0上线啦 文末有福利
爱瑞宝地(Everybody)期待了很久的 i春秋官网4.0上线啦 除了产品的功能更加完善 性能和体验也将大幅度提高 清新.舒适的视觉感受 搭配更加便捷的操作流程 只需一秒,扫码立即登录 即刻进入网络 ...