Java学习笔记(五)——google java编程风格指南(中)
【前面的话】
年后开始正式上班,计划着想做很多事情,但是总会有这样那样的打扰,不知道是自己要求太高还是自我的奋斗意识不够?接下来好好加油。好好学学技术,好好学习英语,好好学习做点自己喜欢的事情,趁着自己还是一个人。
如果你想要学习关于编码风格方面的知识,建议直接阅读参考资料中的文章,比看我这里写的好多了,这是真心话,我只是写自己的笔记。便于自己在以后的编码中注意。
【问题背景】
在做开发工作的时候,总是被说编码风格不好,现在自己找了Google Java编程风格指南进行学习,希望可以写出清晰的代码。
【学习资料】
Google Java编程风格指南,作者:Hawstein
http://hawstein.com/posts/google-java-style.html
【知识汇总】
十、几个具体结构:
1. 枚举类
- 枚举常量间用逗号隔开,换行可选。
- 没有方法和文档的枚举类可写成数组初始化的格式:
- private enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS }
- 由于枚举类也是一个类,因此所有适用于其它类的格式规则也适用于枚举类
2. 变量声明
- 每次只声明一个变量
- 需要时才声明,并尽快进行初始化
3. 数组
- 数组初始化:可写成块状结构——下面的都可以。
- new int[] {
- 0, 1, 2, 3
- }
- new int[] {
- 0,
- 1,
- 2,
- 3
- }
- new int[] {
- 0, 1,
- 2, 3
- }
- new int[]
- {0, 1, 2, 3}
- 非C风格的数组声明——中括号是类型的一部分:
String[] args
, 而非String args[]
。
4. switch语句——switch块的大括号内是一个或多个语句组。每个语句组包含一个或多个switch标签(case FOO:
或default:
),后面跟着一条或多条语句。
- 缩进:
与其它块状结构一致,switch块中的内容缩进为2个空格。每个switch标签后新起一行,再缩进2个空格,写下一条或多条语句。
- Fall-through:注释
在一个switch块内,每个语句组要么通过break, continue, return
或抛出异常来终止,要么通过一条注释来说明程序将继续执行到下一个语句组,任何能表达这个意思的注释都是OK的(典型的是用// fall through
)。这个特殊的注释并不需要在最后一个语句组(一般是default
)中出现。
- 示例:
- switch (input) {
- case 1:
- case 2:
- prepareOneOrTwo();
- // fall through
- case 3:
- handleOneTwoOrThree();
- break;
- default:
- handleLargeNumber(input);
- }
- default的情况要写出来——每个switch语句都包含一个default语句组,即使它什么代码也不包含。
5. 注解(Annotations)
- 注解紧跟在文档块后面,应用于类、方法和构造函数,一个注解独占一行
- @Override
- @Nullable
- public String getNameIfPresent() { ... }
- 例外:单个的注解可以和签名的第一行出现在同一行。例如:
- @Override public int hashCode() { ... }
- 应用于字段的注解紧随文档块出现,应用于字段的多个注解允许与字段出现在同一行。例如:
- @Partial @Mock DataLoader loader;
参数和局部变量注解没有特定规则。
6. 注释
- 块注释风格
- 块注释与其周围的代码在同一缩进级别。它们可以是/* ... */风格,也可以是// ...风格。对于多行的/* ... */注释,后续行必须从*开始,并且与前一行的*对齐。以下示例注释都是OK的。
- /*
- * This is // And so /* Or you can
- * okay. // is this. * even do this. */
- */
7. Modifiers
类和成员的modifiers如果存在,则按Java语言规范中推荐的顺序出现。
- public protected private abstract static final transient volatile synchronized native strictfp
十一、命名规则
1. 对所有标识符都通用的规则
- 标识符只能使用ASCII字母和数字,因此每个有效的标识符名称都能匹配正则表达式\w+。
- 在Google其它编程语言风格中使用的特殊前缀或后缀,如name_, mName, s_name和kName,在Java编程风格中都不再使用。
2. 标识符类型的规则
- 包名——包名全部小写,连续的单词只是简单地连接起来,不使用下划线
- 类名
- 类名都以UpperCamelCase(第一个词的首字母,以及后面每个词的首字母都大写,叫做“大骆驼拼写法”)风格编写。
- 类名通常是名词或名词短语,接口名称有时可能是形容词或形容词短语。现在还没有特定的规则或行之有效的约定来命名注解类型。
- 测试类的命名以它要测试的类的名称开始,以Test结束。例如,HashTest或HashIntegrationTest。
- 方法名
- 方法名都以lowerCamelCase(第一个词的首字母小写,后面每个词的首字母大写,叫做“小骆驼拼写法”)风格编写。
- 方法名通常是动词或动词短语。
- 下划线可能出现在JUnit测试方法名称中用以分隔名称的逻辑组件。一个典型的模式是:test<MethodUnderTest>_<state>,例如testPop_emptyStack。并不存在唯一正确的方式来命名测试方法。
- 常量名
- 常量名命名模式为CONSTANT_CASE,全部字母大写,用下划线分隔单词。那,到底什么算是一个常量?
- 每个常量都是一个静态final字段,但不是所有静态final字段都是常量。在决定一个字段是否是一个常量时,考虑它是否真的感觉像是一个常量。例如,如果任何一个该实例的观测状态是可变的,则它几乎肯定不会是一个常量。只是永远不打算改变对象一般是不够的,它要真的一直不变才能将它示为常量。
- // Constants
- static final int NUMBER = 5;
- static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann");
- static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable
- static final SomeMutableType[] EMPTY_ARRAY = {};
- enum SomeEnum { ENUM_CONSTANT }
- // Not constants
- static String nonFinal = "non-final";
- final String nonStatic = "non-static";
- static final Set<String> mutableCollection = new HashSet<String>();
- static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable);
- static final Logger logger = Logger.getLogger(MyClass.getName());
- static final String[] nonEmptyArray = {"these", "can", "change"};
- 非常量字段名——非常量字段名以
lowerCamelCase
风格编写。 - 参数名——参数名以lowerCamelCase风格编写。参数应该避免用单个字符命名。
- 局部变量名
- 局部变量名以lowerCamelCase风格编写,比起其它类型的名称,局部变量名可以有更为宽松的缩写。
- 虽然缩写更宽松,但还是要避免用单字符进行命名,除了临时变量和循环变量。
- 即使局部变量是final和不可改变的,也不应该把它示为常量,自然也不能用常量的规则去命名它。
- 类型变量名
- 单个的大写字母,后面可以跟一个数字(如:E, T, X, T2)。
- 以类命名方式,后面加个大写的T(如:RequestT, FooBarT)。
3. 驼峰式命名法——驼峰式命名法分大驼峰式命名法(UpperCamelCase
)和小驼峰式命名法(lowerCamelCase
)。有时,我们有不只一种合理的方式将一个英语词组转换成驼峰形式,如缩略语或不寻常的结构(例如"IPv6"或"iOS")。Google指定了以下的转换方案。
- 把短语转换为纯ASCII码,并且移除任何单引号。例如:"Müller’s algorithm"将变成"Muellers algorithm"。
- 把这个结果切分成单词,在空格或其它标点符号(通常是连字符)处分割开。
- 现在将所有字母都小写(包括缩写),然后将单词的第一个字母大写:
- 每个单词的第一个字母都大写,来得到大驼峰式命名。‘
- 除了第一个单词,每个单词的第一个字母都大写,来得到小驼峰式命名。
- 最后将所有的单词连接起来得到一个标识符。
举例:
- Prose form Correct Incorrect
- ------------------------------------------------------------------
- "XML HTTP request" XmlHttpRequest XMLHTTPRequest
- "new customer ID" newCustomerId newCustomerID
- "inner stopwatch" innerStopwatch innerStopWatch
- "supports IPv6 on iOS?" supportsIpv6OnIos supportsIPv6OnIOS
- "YouTube importer" YouTubeImporter
未完待续,见下一篇文章。。。。。。
【后面的话】
做舅舅了,哈哈哈哈。。。。。。。。。。。
——TT
Java学习笔记(五)——google java编程风格指南(中)的更多相关文章
- 读书笔记 |Google C++编程风格指南
Google C++编程风格指南 ## 0. 背景 每一个C++程序员都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug.难于阅读和维护. 本指 ...
- Google C++编程风格指南 - 中文版
Google C++编程风格指南 - 中文版 from http://code.google.com/p/google-styleguide/ 版本: 3.133原作者: Benjy Weinberg ...
- google C++编程风格指南之头文件的包括顺序
google C++编程风格对头文件的包括顺序作出例如以下指示: (1)为了加强可读性和避免隐含依赖,应使用以下的顺序:C标准库.C++标准库.其他库的头文件.你自己project的头文件.只是这里最 ...
- Java学习笔记心得——初识Java
初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开 ...
- Google C++编程风格指南
作者:Hawstein 出处:http://hawstein.com/posts/google-cpp-style-guide.html 前言 越来越发现一致的编程风格的重要性,于是把Google的C ...
- Java学习笔记五:Java中常用的运算符
Java中常用的运算符 运算符是一种“功能”符号,用以通知 Java 进行相关的运算.譬如,我们需要将变量 score 的值设置为 20 ,这时候就需要一个“=”,告诉程序需要进行赋值操作. Java ...
- Java 学习笔记 (五) Java Compile\Build\Make的区别
以下内容引自: http://blog.51cto.com/lavasoft/436216 Compile.Make和Build的区别 原创leizhimin2010-11-30 11:30:20评论 ...
- Java学习笔记五 常用API对象一
常用API:字符串操作:String类,StringBuffer类,StringBulider类 字符串是最重要的数据类型之一,处理字符串也是一种语言的基本工作. 1.String类: public ...
- Java学习笔记之:Java简介
一.引言 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出. ...
- Java 学习笔记 ------第一章 Java平台概论
本章学习目标: Java版本迁移简介 认识Java SE.Java EE.Java ME 认识JDK规范与操作 了解JVM.JRE与JDK 下载与安装JDK 一.Java版本迁移简介 书上已经表达得非 ...
随机推荐
- oracle序列
一.序列 序列是oracle用来生产一组等间隔的数值.序列是递增,而且连续的.oracle主键没有自增类型,所以一般使用序列产生的值作为某张表的主键,实现主键自增.序列的编号不是在插入记录的时候自动生 ...
- kvm解决1000M网卡问题
1.当我们安装完虚拟机, 发现虚拟机竟然是 100M 网络, 传输速率很低, 那是怎么导致的呢,如何来解决呢? 需要我们修改 vm01.xml 配置文件网卡段,添加如下红色标记行,改 为 e1000, ...
- JavaScript 题目破解过程与解析
题目来源 https://www.hackthissite.org/missions/javascript/ HackThisSite JavaScript mission 1-7 1 我先尝试输入 ...
- zabbix安装排错过程
在讲安装过程之前需要先把zabbix的工作流程简单的讲一遍:zabbix是个开源监控软件,通过web才能更直观的监控我们想要监控的主机,同时,zabbix从被监控主机获取到的信息需要存放在数据库中,因 ...
- 20150912华为机考2之"输入一段字符串(英文),将每个单词首字母大写后输出"
还有其他一些(隐性)要求(要不然无法通过测试): .如果首字母已经大写,则不用变 .不是英文字母的不变 e.g. Input: hello world! this is _Ljj speaking! ...
- VMware + OpenStack: 从 Plugin 到 VIO (VMware Integrated OpenStack)的演进
VMware 做为实际上的企业虚拟化领导者,对 OpenStack 的态度一直在变化.一开始,VMware 表达出与 OpenStack 的竞争态度.随着 OpenStack 的逐步壮大并且一步一步进 ...
- 【iOS 初见】第一个简单的 iOS 应用
本实例来自 <iOS编程(第4版)>,介绍如何编写一个简单的 iOS 应用. 功能为:在视图中显示一个问题,用户点击视图下方的按钮,可以显示相应的答案,用户点击上方的按钮,则会显示一个新的 ...
- [cocos2dx]利用NDK崩溃日志查找BUG
摘要: 在android上开发c++应用, crash日志都是汇编码, 很难对应到c++代码中去. 通过此文, 你可以定位到程序崩溃时的C++代码, 精确查找问题. 博客: http://www.cn ...
- 怎样获取优酷站内视频的MP4格式地址,嵌入到手机页面播放
最近的有关项目需要使用video标签播放视频,并且视频的路径src是优酷里面的视频,所以需要得到优酷里面的mp4路径才能播放. 但是在网上查了下资料,看到优酷的播放格式是一个m3u8文件,如图所示: ...
- Codeforces 13C Sequence --DP+离散化
题意:给出一个 n (1 <= n <= 5000)个数的序列 .每个操作可以把 n 个数中的某一个加1 或 减 1.问使这个序列变成非递减的操作数最少是多少 解法:定义dp[i][j]为 ...