Java代码风格和在idea中的一些设置
源文件基本设置
1. 文件名
驼峰标识,.java结尾
2. 编码
统一为UTF-8
Transport...可以解决property文件不能正常显示为中文的问题

3. 特殊字符
- 尽量使用转义字符(\t, \n等),而不是八进制的(\012)或者Unicode转义(\u000a)
- 非ascii字符,最容易理解,使用unicode字符,比如:μ,不使用转义:\u03bcs
源文件结构
- license
- package
- import
- 一个主类
每一个部分之间用一个空行隔开
1. license
2. 包名
不换行(line-wrapped),一行写完
3. import
- import的时候不使用通配符*
- 不单独区分jdk的import和其他import,只按照静态引用和非静态引用分块
- 静态引用、非静态引用之间用空行分开,各自的块中间没有空行

4. 类
- 一个文件只有一个top-level类
格式
1. 大括号(braces)
- If,lese,if else,for,do,while,这些语句块都要用大括号
- 这些关键字后面的左大括号前面要有空格(没有换行),后面换行,右大括号前后都需要换行(如果右大括号后面有一些特殊的语句块的时候不需要换行,如:else,catch)
- 如果语句块是空的,可以简写
// This is acceptable
void doNothing() {}
// This is equally acceptable
void doNothingElse() {
}
// This is not acceptable: No concise empty blocks in a multi-block statement
try {
doSomething();
} catch (Exception e) {}
2. 块缩进
4个空格
3. 每行一个声明
- 变量不要连续声明
- 每行一个语句(一个分号)
4. 列长限制120
列外情况:
- 不可能遵守的这个规则的情况(比如:URL)
- package、import
- 注释里面的会被拷贝粘贴到命令行里运行的命令

5. 折行(line-wrapping)
1. 什么时候折行?
究竟应该在哪里折行?随性,一个主要的指导是:最好在语法层面上折行
- 如果折行的地方正好是非等号运算符,则在运算符前面折行,包括类似运算符的符号,比如:
- 点运算符,"."
- 泛型,""
- 如果折行的地方正好是等号运算符,则在符号后面折行,包括类似等号运算符,比如:
- foreach的":"
- 方法或者构造方法的名字和左括号("(")最好在一行,即方法的左括号后折行
- 逗号(",")和他前面的部分在一行,逗号后折行
- lamda的箭头后面(的"{")不换行,除非j方法体部分不需要大括号
MyLambda<String, Long, Object> lambda =
(String label, Long value, Object obj) -> {
...
};
Predicate<String> predicate = str ->
longExpressionInvolving(str);
2. 有折行时候的缩进
- 有折行的情况下,每次折行都至少缩进4个空格(相较于第一行)
- 如果多次缩进是语法上并行的元素,那么可以缩进相同,否则在持续缩进中,每次都要增加4个空格
- 没有必要为了水平对齐而增加额外的空格
6. 空白
垂直的空白
- 字段、构造方法、成员方法、内部类、静态初始化、实例初始化,这些之间用空行隔开
- 成员字段之间不用空行,除非为了逻辑上的分组
- enum字段之间用空行隔开
- 为了组织代码而进行逻辑分割可以使用空行
- 类第一个成员前面不需要空行,最后一个成员后面也不需要空行
- 字段、构造方法、成员方法、内部类、静态初始化、实例初始化,这些之间用空行隔开
水平空白
关键字后面的小括号("(")之间要有一个空格作为分隔,if,for,catch
关键字前面的大括号("}")之间要有一个空格作为分隔,else, catch
左大括号("{")前面要有一个空格,两个例外:
@SomeAnnotation({a, b})(no space is used)String[][] x = {{"foo"}};(no space is required between{{)
二元或者三元运算符前后都要有空格,包括类似运算符的符号,如:
- 泛型中,
<T extends Foo & Bar> - foreach中":"前后
- lamda表达式的"->"前后
但是不包括:
- 点运算符"."
- 泛型中,
在
,:;后面有空格,还有强转的右括号后面")"行末注释"//"两侧都需要空格,多个是允许的,但不是必须的
在变量类型和声明之间:List list
数组初始化的大括号里面,左大括号后面和右大括号前面的空格不是必须的
new int[] {5, 6}andnew int[] { 5, 6 }are both valid水平对齐所需要的空白:不需要
增加维护成本
7. 加上分组用的小括号
便于理解运算顺序,而不必记住Java优先级表
8. 特定的一些构造
enum
如果元素有构造方法或者一般方法的情况,元素之间可以用空行隔开
private enum Answer {
YES {
@Override public String toString() {
return "yes";
}
}, NO,
MAYBE
}
如果没有构造方法等可以用下面的方式
private enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS }
变量声明
- 一次声明一个变量,不要出现如
int a, b; - 局部变量在必要的还是再声明,保证最小化生命周期
- 一次声明一个变量,不要出现如
数组
- 数组初始化可以当做一个block,例如:
new int[] { new int[] {
0, 1, 2, 3 0,
} 1,
2,
new int[] { 3,
0, 1, }
2, 3
} new int[]
{0, 1, 2, 3}
- 方括号跟在类型后面,方括号和类型共同组成一个类型,
String[] arr,而不是String arr[]
switch语句
- case缩进4个空格
- 冒号后换行
- 有穿透的(case没有break)还是要说明,注释
- 保留default,即使没有代码
注解
- 一个注解单独一行
注释
多行注释中第一行和最后一行不写注释
/*
* This is // And so /* Or you can
* okay. // is this. * even do this. */
*/
修饰词
Java中修饰词的顺序
public protected private abstract default static final transient volatile synchronized native strictfp
数字字面值
如果是
long类型的字面值,最后加"L",而不是"l",如:long length = 1000L;
命名
1. 通用的命名规则
仅仅使用ascii字符和数字,少数情况使用下划线(比如:常量命名,大写,多个单词之间使用下划线隔开)
2. 每种标识符对应的命名规则
package:全小写,不使用下划线
class:
- 使用首字母大写的驼峰标识
- 类名使用名词或者名词短语,接口使用名词或者名词短语,部分情况使用形容词(Readable)
- 注解没有指定的规则
- 测试类,<被测试的类名>+Test
method:
- 方法名首字母小写的驼峰标识
- 方法名是动词或者动词短语
- 测试方法名称:test+<被测试的方法名>+
constant:
- 全大写,单词之间用下划线隔开
- 名词或者名词短语
- 怎么才算常量:
- static final修饰的原始类型、String、不可变的集合
- 对象所有可被访问的状态不可变
非常量字段命名
- 首字母小写,驼峰标识
- 名词或者名词短语
形参名
- 首字母小写,驼峰标识
- public方法的参数名不能只有一个字母
局部变量命名
- 首字母小写的驼峰标识
- 局部变量即使是不可变的,也不能按照常量的方法来命名
泛型参数
下面两种方式中选一个
- 单个大写字母后面跟上数字
- 若泛型有上限,则上限类名后面跟上大写的
T
3. 驼峰标识的具体方法
怎么将多个单词或者单词短语转换为驼峰标识的命名方法
- 将所有的单词或者短语转换为ascii,并且删除中间的任何撇号,如:"Müller's algorithm"转换为 "Muellers algorithm"。
- 将上面得到的划分为单词,使用空格或者标点符号(特别是连字符)作为分界线。如果一个短语有惯常用法,则保留惯常用法,比如:AdWords 转换为Ad Words
- 将得到的字符串全部转换为小写,然后将划分后的每一个单词的首字母大写(如果是第一个单词则可能第一个单词的首字母小写)
- 然后将字符串连接起来,去掉空格
一些例子:
| 需要转换的字符串 | 正确的 | 不正确的 |
| "XML HTTP request" | XmlHttpRequest |
XMLHTTPRequest |
| "new customer ID" | newCustomerId |
newCustomerID |
| "inner stopwatch" | innerStopwatch |
innerStopWatch |
| "supports IPv6 on iOS?" | supportsIpv6OnIos |
supportsIPv6OnIOS |
| "YouTube importer" | YouTubeImporter YoutubeImporter |
编程实践
1. 总是写@Override
2. 不忽略任何异常
需要catch异常,并做处理,如果没有必要处理,要用注释说明
3. 使用类名来引用静态成员
4. 不重写Object.finalize
如果非要重写,请阅读并理解《Effective Java》里面避免Finalizer的部分
其他在idea中的设置
换行符
统一为"\n"

缩进
统一为:tab 4 个空格

参考
Java代码风格和在idea中的一些设置的更多相关文章
- 如何通过 Java 代码隐藏 Word 文档中的指定段落
在编辑Word文档时,我们有时需要将一些重要信息保密. 因此,可以隐藏它们以确保机密性. 在本文中,将向您介绍如何通过 Java 程序中的代码隐藏 Word 文档中的特定段落.下面是我整理的具体步骤, ...
- Google java代码风格导入Eclipse
Git地址 https://github.com/codeset/google-java-styleguide 下载配置文件在Eclipse中执行导入:Window -> Preferences ...
- [改善Java代码]不要在finally块中处理返回值
在finally代码块中处理返回值,这是在面试题中经常出现的题目.但是在项目中绝对不能再finally代码块中出现return语句,这是因为这种处理方式非常容易产生"误解",会严重 ...
- Java 代码学习之理解数据类型中的坑
package dailytest; import org.junit.Test; public class DataTypeTest { /** * 当有字符串第一次参与运算后,+成了连接符的作用 ...
- java代码实现对excel加密、解密(设置或去除打开密码)
使用jxcell组件来完成对excel加密.解密的功能. jxcell.jar[点击下载](此jar没有使用限制,你懂得) 具体代码如下: import java.io.IOException; im ...
- 在Python程序中调用Java代码的实现
<原创不易,转载请标明出处:https://www.cnblogs.com/bandaobudaoweng/p/10785766.html> 前言 开发Python程序,需求中需要用到Ja ...
- 【HBase】通过Java代码实现HBase数据库中数据的增删改查
目录 创建maven工程,导入jar包 java代码实现创建hbase表 java代码实现向hbase表中插入数据 java代码查询hbase数据 使用rowKey查询指定列族指定列的值 通过star ...
- Visual Studio 代码风格约束
团队内部若能统一代码风格对于日后的项目维护大有裨益,但面对厚达十几甚至几十页的代码风格规范,开发人员难免产生抵触心理.Python和Go等在语言层面就对代码风格作了一定的约束,但C#并没有,为解决这个 ...
- java代码打包成jar以及转换为exe
教你如何把java代码打包成jar文件以及转换为exe可执行文件 1.背景: 学习java时,教材中关于如题问题,只有一小节说明,而且要自己写麻烦的配置文件,最终结果却只能转换为jar文件.实在是心有 ...
随机推荐
- 【Luogu1345】奶牛的电信(网络流)
[Luogu1345]奶牛的电信(网络流) 题面 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成 ...
- 【BZOJ2152】聪聪可可(点分治)
[BZOJ2152]聪聪可可(点分治) 题面 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电 ...
- APIO2010特别行动队
斜率优化 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <s ...
- c#开发wps插件
wps 2016版比旧版感觉大气多了,加载速度快,操作方便,一直是wps的优点.随着wps的稳定性提高(当然比office还是差了很多),政府等一些部门采用几乎免费的wps来办公.我们公司决定把业务扩 ...
- Postman使用小技巧
Postman使用小技巧 2017-09-13 目录: 1 自动生成流水号2 保存响应结果 1 自动生成流水号 返回 为了让接口具有幂等性,在设计时,往往有一个字段是唯一的(比如流水号,交易编号等), ...
- Lintcode248 Count of Smaller Number solution 题解
[题目描述] Give you an integer array (index from 0 to n-1, where n is the size of this array, value from ...
- kali linux安装搜狗输入法的方法
kali linux安装搜狗输入法比较麻烦,因为有很多依赖项,不过安装好就很好用,觉得麻烦的一般安装ibus,经典,也常更新. 下面就说说怎么安装搜狗输入法: 先去http://http.kali.o ...
- guava cache使用和源码分析
guava cache的优点和使用场景,用来判断业务中是否适合使用此缓存 介绍常用的方法,并给出示例,作为使用的参考 深入解读源码. guava简介 guava cache是一个本地缓存.有以下优点: ...
- OCR技术浅探:基于深度学习和语言模型的印刷文字OCR系统
作者: 苏剑林 系列博文: 科学空间 OCR技术浅探:1. 全文简述 OCR技术浅探:2. 背景与假设 OCR技术浅探:3. 特征提取(1) OCR技术浅探:3. 特征提取(2) OCR技术浅探:4. ...
- c++趣味之shared_ptr额外好处
shared_ptr(sp)额外好处是什么?即使被转为基类,析构函数也可以正常执行. 已知两个类 class foo{}; class bar:foo{public:~bar(){}}; 先来看不用s ...