JAVA编程规范

华为JAVA编程规范 华为JAVA编程军规 文章目录华为JAVA编程军规注释排版规则排版规则一排版规则二排版规则三排版规则四排版规则五:命名规则命名规则一命名规则二命名规则三命名规则四 注释 源程序注释量必须在30%以上 注释的内容要清楚,明了,含义准确 排版规则 排版规则一 程序块要采用缩进风格编写,缩进的空格数为4个 不允许使用TAB缩进 public class JavaCode { //缩进的空格数为4个↓ int age=10; } 排版规则二 分节符(如大括号’{‘和’}'应)各独占一行,同时与引用 阅读详情

命名规范
定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)


Package 的命名
Package 的名字应该都是由一个小写单词组成。
Class 的命名
Class 的名字必须由大写字母开头而其他字母都小写的单词组成
Class 变量的命名
变量的名字必须用一个小写字母开头。后面的单词用大写字母开头。
Static Final 变量的命名
Static Final 变量的名字应该都大写,并且指出完整含义。
参数的命名
参数的名字必须和变量的命名规范一致。
数组的命名
数组应该总是用下面的方式来命名:

byte[] buffer;


而不是:

byte buffer[];

 

方法的参数
使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:

SetCounter(int size){
this.size = size;
}

 


Java 文件样式
所有的 Java(*.java) 文件都必须遵守如下的样式规则


版权信息
版权信息必须在 java 文件的开头,比如:

/**
* Copyright ? 2000 Shanghai XXX Co. Ltd.
* All right reserved.
*/


其他不需要出现在 javadoc 的信息也可以包含在这里。


Package/Imports
package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。

package hotlava.net.stats;

import java.io.*;
import java.util.Observable;
import hotlava.util.Application;


这里 java.io.* 使用来代替InputStream and OutputStream 的。


Class
接下来的是类的注释,一般是用来解释类的。

/**
* A class representing a set of packet and byte counters
* It is observable to allow it to be watched, but only
* reports changes when the current set is complete
*/


接下来是类定义,包含了在不同的行的 extends 和 implements

public class CounterSet
extends Observable
implements Cloneable

 

Class Fields
接下来是类的成员变量:

/**
* Packet counters
*/
protected int[] packets;


public 的成员变量必须生成文档(JavaDoc)。proceted、private和 package 定义的成员变量如果名字含义明确的话,可以没有注释。


存取方法
接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。

/**
* Get the counters
* @return an array containing the statistical data. This array has been
* freshly allocated and can be modified by the caller.
*/
public int[] getPackets() { return copyArray(packets, offset); }
public int[] getBytes() { return copyArray(bytes, offset); }

public int[] getPackets() { return packets; }
public void setPackets(int[] packets) { this.packets = packets; }


其它的方法不要写在一行上


构造函数
接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。
访问类型 ("public", "private" 等.) 和 任何 "static", "final" 或 "synchronized" 应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。

public
CounterSet(int size){
this.size = size;
}

 

克隆方法
如果这个类是可以被克隆的,那么下一步就是 clone 方法:

public
Object clone() {
try {
CounterSet obj = (CounterSet)super.clone();
obj.packets = (int[])packets.clone();
obj.size = size;
return obj;
}catch(CloneNotSupportedException e) {
throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());
}
}

 

类方法
下面开始写类的方法:

/**
* Set the packet counters
* (such as when restoring from a database)
*/
protected final
void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
throws IllegalArgumentException
{
//
// Ensure the arrays are of equal size
//
if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)
throw new IllegalArgumentException("Arrays must be of the same size");
System.arraycopy(r1, 0, r3, 0, r1.length);
System.arraycopy(r2, 0, r4, 0, r1.length);
}

 


toString 方法
无论如何,每一个类都应该定义 toString 方法:

public
String toString() {
String retval = "CounterSet: ";
for (int i = 0; i < data.length(); i++) {
retval += data.bytes.toString();
retval += data.packets.toString();
}
return retval;
}
}

 

main 方法
如果main(String[]) 方法已经定义了, 那么它应该写在类的底部.

代码编写格式


代码样式
代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行)
文档化
必须用 javadoc 来为类生成文档。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。使用 @author 标记是不被推荐的,因为代码不应该是被个人拥有的。
缩进
缩进应该是每行2个空格. 不要在源文件中保存Tab字符. 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度.
如果你使用 UltrEdit 作为你的 Java 源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符, 方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格,然后用 Format|Tabs to Spaces 菜单将 Tab 转换为空格。
页宽
页宽应该设置为80字符. 源代码一般不会超过这个宽度, 并导致无法完整显示, 但这一设置也可以灵活调整. 在任何情况下, 超长的语句应该在一个逗号或者一个操作符后折行. 一条语句折行后, 应该比原来的语句再缩进2个字符.
{} 对
{} 中的语句应该单独作为一行. 例如, 下面的第1行是错误的, 第2行是正确的:

if (i>0) { i ++ }; // 错误, { 和 } 在同一行

if (i>0) {
i ++
}; // 正确, { 单独作为一行


} 语句永远单独作为一行.


如果 } 语句应该缩进到与其相对应的 { 那一行相对齐的位置。


括号
左括号和后一个字符之间不应该出现空格, 同样, 右括号和前一个字符之间也不应该出现空格. 下面的例子说明括号和空格的错误及正确使用:

CallProc( AParameter ); // 错误
CallProc(AParameter); // 正确

不要在语句中使用无意义的括号. 括号只应该为达到某种目的而出现在源代码中。下面的例子说明错误和正确的用法:

if ((I) = 42) { // 错误 - 括号毫无意义
if (I == 42) or (J == 42) then // 正确 - 的确需要括号


程序编写规范


exit()
exit 除了在 main 中可以被调用外,其他的地方不应该调用。因为这样做不给任何代码代码机会来截获退出。一个类似后台服务地程序不应该因为某一个库模块决定了要退出就退出。
异常
申明的错误应该抛出一个RuntimeException或者派生的异常。
顶层的main()函数应该截获所有的异常,并且打印(或者记录在日志中)在屏幕上。
垃圾收集
JAVA使用成熟的后台垃圾收集技术来代替引用计数。但是这样会导致一个问题:你必须在使用完对象的实例以后进行清场工作。比如一个prel的程序员可能这么写:

...
{
FileOutputStream fos = new FileOutputStream(projectFile);
project.save(fos, "IDE Project File");
}
...


除非输出流一出作用域就关闭,非引用计数的程序语言,比如JAVA,是不能自动完成变量的清场工作的。必须象下面一样写:

FileOutputStream fos = new FileOutputStream(projectFile);
project.save(fos, "IDE Project File");
fos.close();

 

Clone
下面是一种有用的方法:

implements Cloneable

public
Object clone()
{
try {
ThisClass obj = (ThisClass)super.clone();
obj.field1 = (int[])field1.clone();
obj.field2 = field2;
return obj;
} catch(CloneNotSupportedException e) {
throw new InternalError("Unexpected CloneNotSUpportedException: " + e.getMessage());
}
}

 

final 类
绝对不要因为性能的原因将类定义为 final 的(除非程序的框架要求)
如果一个类还没有准备好被继承,最好在类文档中注明,而不要将她定义为 final 的。这是因为没有人可以保证会不会由于什么原因需要继承她。
访问类的成员变量
大部分的类成员变量应该定义为 protected 的来防止继承类使用他们。
注意,要用"int[] packets",而不是"int packets[]",后一种永远也不要用。

public void setPackets(int[] packets) { this.packets = packets; }

CounterSet(int size)
{
this.size = size;
}

 


编程技巧


byte 数组转换到 characters
为了将 byte 数组转换到 characters,你可以这么做:

"Hello world!".getBytes();


Utility 类
Utility 类(仅仅提供方法的类)应该被申明为抽象的来防止被继承或被初始化。


初始化
下面的代码是一种很好的初始化数组的方法:

objectArguments = new Object[] { arguments };


枚举类型
JAVA 对枚举的支持不好,但是下面的代码是一种很有用的模板:

class Colour {
public static final Colour BLACK = new Colour(0, 0, 0);
public static final Colour RED = new Colour(0xFF, 0, 0);
public static final Colour GREEN = new Colour(0, 0xFF, 0);
public static final Colour BLUE = new Colour(0, 0, 0xFF);
public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);
}


这种技术实现了RED, GREEN, BLUE 等可以象其他语言的枚举类型一样使用的常量。 他们可以用 == 操作符来比较。
但是这样使用有一个缺陷:如果一个用户用这样的方法来创建颜色 BLACK

new Colour(0,0,0)

那么这就是另外一个对象,==操作符就会产生错误。她的 equal() 方法仍然有效。由于这个原因,这个技术的缺陷最好注明在文档中,或者只在自己的包中使用。

Swing


避免使用 AWT 组件
混合使用 AWT 和 Swing 组件
如果要将 AWT 组件和 Swing 组件混合起来使用的话,请小心使用。实际上,尽量不要将他们混合起来使用。


滚动的 AWT 组件
AWT 组件绝对不要用 JscrollPane 类来实现滚动。滚动 AWT 组件的时候一定要用 AWT ScrollPane 组件来实现。


避免在 InternalFrame 组件中使用 AWT 组件
尽量不要这么做,要不然会出现不可预料的后果。


Z-Order 问题
AWT 组件总是显示在 Swing 组件之上。当使用包含 AWT 组件的 POP-UP 菜单的时候要小心,尽量不要这样使用。

 

调试


调试在软件开发中是一个很重要的部分,存在软件生命周期的各个部分中。调试能够用配置开、关是最基本的。

很常用的一种调试方法就是用一个 PrintStream 类成员,在没有定义调试流的时候就为 null,类要定义一个 debug 方法来设置调试用的流。

 

性能


在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。

不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。
不必要的对象构造
不要在循环中构造和释放对象


使用 StringBuffer 对象
在处理 String 的时候要尽量使用 StringBuffer 类,StringBuffer 类是构成 String 类的基础。String 类将 StringBuffer 类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用 StringBuffer 来实现大部分的工作,当工作完成后将 StringBuffer 对象再转换为需要的 String 对象。比如:如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用 StringBuffer 对象和她的 append() 方法。如果我们用 String 对象代替 StringBuffer 对象的话,会花费许多不必要的创建和释放对象的 CPU 时间。

避免太多的使用 synchronized 关键字
避免不必要的使用关键字 synchronized,应该在必要的时候再使用她,这是一个避免死锁的好方法。

可移植性
Borland Jbulider 不喜欢 synchronized 这个关键字,如果你的断点设在这些关键字的作用域内的话,调试的时候你会发现的断点会到处乱跳,让你不知所措。除非必须,尽量不要使用。


换行
如果需要换行的话,尽量用 println 来代替在字符串中使用"
"。
你不要这样:

System.out.print("Hello,world!
");

要这样:

System.out.println("Hello,world!");

或者你构造一个带换行符的字符串,至少要象这样:

String newline = System.getProperty("line.separator");
System.out.println("Hello world" + newline);


PrintStream
PrintStream 已经被不赞成(deprecated)使用,用 PrintWrite 来代替她。

Java代码编程格式规范 Java代码编程格式规范 目 录 1 前言. 5 2 适用范围. 5 3 命名规范. 5 3.1 Package 的命名. 5 3.2 Class 的命名. 5 3.3 Class 变量的命名. 6 3.4 Static Final 变量的命名. 6 3.5 常量. 6 3.6 前后台变量名称. 6 3.7 参数的命名. 6 3.8 数组的命名. 6 3.9 方法的参数. 6 3.10 缩写. 7 ... 阅读详情

相关推荐

unable to find setter method for attribute:[commandName]

问题描述: 后台数据封装处理之后,返回到前台jsp页面时jsp页面报异常:unable to find setter method for attribute:[commandName] 问题解决办法: 查看tld文件得知类文件org.springframework.web.servlet.tags.form.FormTag 查看是否commandName是否已经弃用 有@Depre...

lierjun 的专栏 1722

解决 IDEA 调用其他类的时候自动加上包路径和类名的情况

应用场景: 假如说在 cn.xxxx.xxxxx.domain包中有个类叫做AAA的类,里边有各样的方法 然后再 cn.xxxx.xxxxx.net包中又定义了一个类。这个类需要调用cn.xxxx.xxxxx.domain包里AAA类中的方法。。 有没有一种设置,可以让idea是以 import cn.xxxx.xxxxx.domain.AAA 的形式将类导

美意如此 1万+

玩转肺癌目标检测数据集Lung-PET-CT-Dx ——①从TCIA获取影像数据集

该目标检测公共数据集源自 The Cancer Imaging Archive(TCIA),是肿瘤研究方面的著名的医学影像公开数据库。 数据以 DICOM 格式存储,由肺癌受试者的 CT 和 PET-CT DICOM 图像组成。

takedachia的博客 1万+

自定义标签 Unable to find setter method for attribute

变量的首字母不能大写 http://blog.youkuaiyun.com/looksun/article/details/7690601

JarvisLau的博客 689

激光及激光器超全细节&原理总结

本文详细展示了激光、激光器、PN结、半导体激光器、光纤激光器的原理和应用;

guangwulv的博客 5355

dbt+Snowflake实战:数据建模、权限隔离与性能优化全指南

dbt(data build tool)作为现代数据栈的核心建模工具,其与Snowflake的深度协同远不止于SQL编译执行——它本质是将软件工程实践(如版本控制、测试驱动、CI/CD)注入数据交付流程。理解dbt的声明式建模原理与Snowflake的虚拟仓库、Time Travel、TRANSIENT表、聚簇键等底层机制如何咬合,是实现可维护、可审计、低成本数据产品交付的关键。本文聚焦dbt在Snowflake环境中的真实落地挑战,涵盖schema与warehouse的物理映射设计、role级硬隔离策略、

weixin_34389926的博客 314

关于自定义标签当中的unable to find setter method for attribute:xxx错误 小记

这两天学习JSP的自定义标签内容 在调试的时候出现unable to find setter method for attribute:xxx错误, 网上 看了各种解决方法: 总结尝试过的几点解决办法: 1)重写 getter和setter 方法 源代码定义如下:重新手写和利用myEclipse 给出 的getter和setter方法,均尝试过 仍然不起作用 packag...

weixin_30780649的博客 438

QTabWidget动态标签页管理:从代码创建到UI设计的实战指南

本文深入探讨了QTabWidget动态标签页管理的实战技巧,涵盖从纯代码创建到UI设计器布局的两种核心方法。详细讲解了如何动态添加、插入、关闭标签页,并管理其内容与生命周期。文章还提供了标签页精细化控制、界面优化(如设置图标、样式表)以及构建简易多文档编辑器的进阶实战案例,帮助开发者灵活应对数据监控、多文档编辑等复杂界面需求。

omega的博客 866

java开发命名规则和格式要求

1 接口规范信息 接口应遵循以下命名原则: a) 接口名称应使用英文或者英文+数字的形式,如获取库存接口命名为getStore; b) 接口名称应具有实际意义能体现接口功能,采用英文动宾结构,如获取图书信息接口命名为getBookInfo; c) 接口命名需要区分大小写; d) 接口名称总长度不得超过40个字符。   1.1 接口名称 中文名称:接口名称 描    述:用于标识接

Mao的博客 4683

香橙派OPi 6系列选型指南:RK3588与RK3588S开发板深度对比

开发板选型是嵌入式系统设计的关键环节,尤其在边缘计算和AI推理等场景中,芯片的差异直接影响硬件架构。瑞芯微RK3588及其精简版RK3588S是当前高端开发板的核心方案,两者在PCIe通道、显示输出和SATA支持上存在显著区别。理解这些原理,有助于工程师根据项目需求快速匹配产品。香橙派OPi 6系列基于这两款芯片,衍生出OPi 6、OPi 6 Pro与OPi 6 Max三种形态:紧凑型适合嵌入式门禁与AI盒子,Pro版凭借双屏异显和PCIe 3.0满足收银机与视频分析,Max的双2.5G网口和大内存则面向轻

weixin_29185167的博客 228

SAP_PP模块中MRP中信号灯简介

一、信号灯的作用二、常见的信号灯颜色及含义三、信号灯的来源四、常见场景示例示例1:物料满足所有需求示例2:生产订单已延迟示例3:缺料或未产生计划订单五、相关事务码参考六、如何应对红色或黄色信号灯?七、前台操作说明在 SAP PP 模块中,**MRP(物料需求计划)运行结果中的“信号灯”是一种非常直观的可视化提示工具,用于帮助用户快速识别物料计划是否存在异常或需要关注的问题。这些信号灯通常出现在MD04(库存/需求清单)、MD05(单物料MRP清单)、MD07(MRP列表)**等事务代码的界面中。

我小时候很黑的博客 634

Java编程规范

Java编程规范化整理

云原生Java Web领域技术博客 5762

零基础学GPU KMD--8. 内存管理:GPU 显存与系统内存的协同​8.1 显存分配策略:GEM / TTM 原理

支持 VRAM、GTT(Graphics Translation Table)、SYSTEM 内存的动态迁移与缓存管理。:若缓冲区在 SYSTEM,TTM 分配 GTT 条目并建立页表映射,使 GPU 可直接访问。:系统内存中预留给 GPU 直接访问的区域,通过 GPU 的 MMU 做地址翻译。你需要我继续展开这一部分吗?​ 为复杂离散 GPU 设计,应对大容量 VRAM、多内存域、显存迁移等问题。:重量级、功能全,适合大容量、多内存域的离散 GPU,强调显存迁移与统一管理。

amy_mhd的博客 185

Java语言编程规范

java语言编程规范目录1 概述…. 51.1 目标:…. 51.2 原则:…. 52 Java编程命名规范…. 52.1 包的命名标准…. 62.1.1命名包…. 62.2 类、接口的命名标准…. 62.2.1 命名类…. 62.2.2 命名接口…. 62.2.3 命名编译单元…. 62

CUMTLZ的博客 5678

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Google Java编程规范

原文地址:https://google.github.io/styleguide/javaguide.html引言本文为Google java编程语言编码规范的完整定义。依照此规范编写的Java源码文件可以被称为Google Style。和其他编程规范指南一样,规范不仅包括代码的结构美学,也包括了其他一些业界约定俗成的公约和普遍采用的标准。本文档中的规范基本都是业界已经达成共识的标准,我们尽量避免去

无声黑白的博客 5995

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

java编程的规范_JAVA编程规范

# JAVA编程规范> 阿里巴巴Java开发手册1.4.0.pdf## 命名风格1. 【强制】**类名**使用 **UpperCamelCase** 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID等。正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion反例:macroPolo /...

weixin_36464343的博客 369

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java的编程规范_java编程规范

java编程规范━╅ Java╆━ | 2007-03-02 07:22:00 | 阅读 1277 次 | 评论(0)命名规范定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)Package 的命名Package 的名字应该都是由一个小写单词组成。Class 的命名Clas...

weixin_39900531的博客 167

《java 编程规范》个人总结

最近看了点《java编程规范》,总结了点个人觉得很必要的规范内容。 一. 排版规范 1.避免长的布尔表达式,应换成多个更容易理解的表达式。 bool isFinished = (elementNo maxElement); bool isRepeatedEntry = elementNo == lastElement; if (isFinished || isRepeate

生活从来不曾有过这般惬意... 1219

java编程规范

1          Java编程规范1.1      命名约定1.1.1     包的命名JDK 的标准是――包名称的所有字母均小写,如:package myownpackage;1.1.2     类的命名JDK 的标准是――大写一个类名的首字母,若类名由几个单词构成,那么把它们紧靠到一起(也就是说,不要用下划线来分隔名字)。此外,每个嵌入单词的首字母都要采用大写形式。

gdufs_iiip的专栏 1037

JAVA编程规范总结

JAVA编程规范总结

liangmaoxuan的专栏 685

Java编程规范之命名规范

转自:http://edu.yesky.com/edupxpt/393/2157893.shtml命名规范  定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)  Package 的命名  Package 的名字应该都是由一个小写单词组成。  Class 的命名

chiefsailor的专栏 1071

java编程规范目录_Java编程规范

前言:此文来自阿里巴巴的Java编程规范,在这里记录一下自己以前有疏忽的编程规范。一、POJO类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。 反例:定义为基本数据类型Boolean isDeleted;的属性,它的方法也是isDeleted(),RPC框架在反向解析的时候,“以为”对应的属性名称是deleted,导致属性获取不到,进而抛出异常。二、包名统一使用小写,点分隔符之...

weixin_39932947的博客 315
上一篇: SQL子查询的一些例子
下一篇: JAVA版聊天室
devercn
博客等级 码龄23年 16粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值