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.部分代码描述的是 ...
随机推荐
- mysql 水平分表
新建10张表,user_0,user_1,...user_9,方法不可串用,采用hash或取余法,获取要操作的表名,取值用对应存值的方法 1.hash取余法 public function part_ ...
- Spring框架中<constructor-arg>与<property>理解
配置文件的根元素是beans,每个组件使用bean元素来定义,bean元素可以有许多属性,其中有两个是必须的:id和class.id表示组件的默认名称,class表示组件的类型. 依赖注入的方式: ...
- linux系统中的时间
1.编程显示系统时间: #include <stdio.h> #include <time.h> /* gcc -o fix fixedFormatTime.c ./fix * ...
- Python 爬虫入门(一)——爬取糗百
爬取糗百内容 GitHub 代码地址https://github.com/injetlee/Python/blob/master/qiubai_crawer.py 微信公众号:[智能制造专栏],欢迎关 ...
- TensorFlow.org教程笔记(二) DataSets 快速入门
本文翻译自www.tensorflow.org的英文教程. tf.data 模块包含一组类,可以让你轻松加载数据,操作数据并将其输入到模型中.本文通过两个简单的例子来介绍这个API 从内存中的nump ...
- [Swift]LeetCode299. 猜数字游戏 | Bulls and Cows
You are playing the following Bulls and Cows game with your friend: You write down a number and ask ...
- [Swift]LeetCode828. 独特字符串 | Unique Letter String
A character is unique in string S if it occurs exactly once in it. For example, in string S = " ...
- [Swift]LeetCode902. 最大为 N 的数字组合 | Numbers At Most N Given Digit Set
We have a sorted set of digits D, a non-empty subset of {'1','2','3','4','5','6','7','8','9'}. (Not ...
- python bz2模块
bz2模块提供了使用bzip2算法压缩和解压缩数据一套完整的接口. bz2模块包括: 用于读写压缩文件的open()函数和BZ2File类 用于一次性压缩和解压缩的compress() 和 decom ...
- python获取当前路径
python获取当前执行命令的路径: #!/usr/bin/env python # -*# coding: utf-8 -*- import os print os.getcwd() python获 ...