Java高级代码规范优选Word文档格式.docx
《Java高级代码规范优选Word文档格式.docx》由会员分享,可在线阅读,更多相关《Java高级代码规范优选Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
四:
尽量不要在变量后面加魔法数字,英文单个字母和没有实际意义的英文数字单词来区分变量
StringOne;
命名一个英文数字的变量
Useruser1=newUser();
Useruser2=newUser();
UseruserAdd=newUser();
UseruserUpdate=newUser();
这样会降低代码的可读性,并且不容易日后开发人员的维护
五:
包,类,变量命名不要加下划线(常量除外)
com.tag_test.dao.jdbc_impl
有下划线的包名
intuser_age;
带下划线的变量名
publicclassClass_{}
带下划线的类名
com.tag.test.dao.jdbc.impl
intuserAge;
publicclassClasses{}
一种习惯性的用法,默认的规范
六:
常量命名要大写,单词之间要用下划线分开.
publicstaticfinalStringteamAdd="
teamAdd"
;
小写且没有下划线
publicstaticfinalStringTEAM_ADD="
容易区分变量和常量
七:
方法名第一个字母小写(构造方法除外).
publicvoidFunction(){}
大写的方法名
publicvoidfunction(){}
习惯用法,默认的规范
八:
两个单词以上的变量名要驼峰命名
intuserage;
age单词'
a'
小写
intuserAge;
能够更清晰的看懂变量所带代表的意思
九:
每个变量要用看得懂的词语来描述,尽量不要省略.
privateStudengstu;
把student简写成stu
privateStudentstudent;
使代码看起来清晰使人易懂
十:
一个类的命名一般是名词(有些ing的动词,形容词除外),变量名也是一样.函数的命名必须是动宾短语(构造词除外).
publicclassManage{}
动词类命
publicclass
UserManage{}
能使别人一看到类名就知道这个类大概是做什么的。
十一:
数据库连接对象的生成不能跟Model层混搅,必须将其放在一个单独的类里,用单例模式来实现数据库的连接.
publicclassUserDAOImpl(){
privatestaticConnectionconnection;
publicstaticsynchronizedConnectiongetConnection(){
if(connection==null){
try{}catch(SQLExceptione){}
catch(ClassNotFoundExceptione)
{e.printStackTrace()}
returnconnection;
}
publicclassDBConnectionTools{
privateDBConnectionTools(){}
publicstaticsynchronizedConnectiongetConnection(){
if(connection==null){
try{
Class.forName(Constants.MYSQL_DRIVER);
connection=DriverManager.getConnection(Constants.MYSQL_URL,Constants.MYSQL_USER_NAME,
Constants.MYSQL_PASSWORD);
}catch(SQLExceptione){
e.printStackTrace();
}catch(ClassNotFoundExceptione){
}
数据库连接应当单独出去出来,以便其它类可以复用
十二:
id一般不用int类型,用long类型
intid;
int类型的关于人员的id
Longid;
随着id的增长,当增长的id超出int的范围的时候就会出现异常
十三:
sql语句一定要用占位符,不能用拼写组成的语句
publicvoidaddUser(Useruser){
Stringsql="
insertintostudent(ID,name,sex,address)values("
+user.getId()+"
"
+user.getName()+"
+user.getSex()+"
+user.getAddress()+"
)"
;
//?
则代表占位符
publicvoidaddUser()
{
sql="
insertintostudent(ID,name,sex,address)values(?
?
则代表占位符
//可用预处理来发送sql语句
很容易出现错误,而且不清晰,不容易让人读懂。
十四:
PreparedStatement最好不要声明为类字段.
publicclass
UserDAOImpl()
{
privatePreparedStatementpreparedStatement;
publicclassUserDAOImpl{
publicvoidaddUser(){
PreparedStatementpreparedStatement=newPreparedStatement(sql);
虽然很多类都使用到了PrepareStatement对象,但各个方法里用到的PrepareStatement对象都是不同的,
所以不能作为类字段,抽取出来做类字段的话会出现数据混乱的问题
十五:
做主键的列没有任何业务逻辑,没有任何实际意义,而且任何时候都不能修改。
欠规范主键示例:
主键用一个身份证号码,或者学号
规范主键示例:
主键用id,唯一性的,不可改变的。
虽然身份证号码和学号也是唯一性的,但是他们是有意义的列,而且在程序升级时是可以更改的,
而id主要就是用来做主键的
十六:
取记录的时候,拿数据库条件语句去比较,不要自己用Java代码去比较.
publicvoiddeleteById(Longid){
Stringsql="
selectid,name,agefromuser"
//........................
ResultSetresult=ResultSet.executeQuery();
where(result.next()){
if(result.getLong("
id"
)==id){
//..........................................删除
publicvoiddeleteById(Longid)
deletefromuserwhereid=?
"
//删除操作
一旦取出的数据量过大,而用java代码的if判断的话,会影响运行速率,还可能导致内存不足等错误。
十七:
代码提交之前必须写注释,不管什么原因.
暂时无
暂时无
使别人能够很清晰的你知道做了哪些修改
十八:
提交之前先更新代码.
防止出现冲突
十九:
只要系统有红色错误,那么就不能提交,提交前要保证编译错误全部消除.
如果上传了错误的代码,会导致别人因为下载了错误代码而带来开发上的问题
二十:
每个人的代码每天尽量上传,代码在本地的时间不要超过2天.
保持与资源库的同步
二十一:
提交java代码前应该检查是否有没用的语句如:
(System.out.println();
),jsp页面上面是否有alert调试信息.
因为如果保留了有可能会影响到程序正常运行的结果,如:
for(inti=0;
i<
10;
i++)
System.out.println(i);
//如果测试for语句里有没有执行
i++){
System.out.println("
测试代码是否运行到这里"
);
如果没有删除测试语句,则结果就会不一样了,
二十二:
两个不同的包不能出现相同的文件名
欠规范示例:
packgecom.lxitedu.work.MyWork.java
packgecom.lxitedu.task.MyWork.java
规范示例:
packgecom.lxitedu.task.Work.java
当一个在一个庞大的系统的时候,很可能引起混淆
二十三:
提交代码前如果有TODO标签,要删除掉,如果要标记没有做完的任务或者以后要改进的任务,用LXTODO.
规范代码示例:
二十四:
注释掉的代码提交前要删除。
/*
publicvoidadd(){
if(true){
这段代码已
经给注释掉了,程序中没有用到"
*/
提交前没有删除这段代码
规范代码示例:
删掉就行了
解析:
既然代码在程序中没有用到的话就要删除,以免其他队员看到误解和浪费他人时间来读其代码。
二十五:
代码提交的注释里面不要加自己的名字.
规范代码示例:
因为提交的时候,系统已经帮你提交了用户名。
二十六:
PreparedStatement、ResultSet、Statement.对象用完之后必须进行调用close()将会关闭,立即释放此Statement对象的数据库和JDBC资源,不然会占用系统很多资源.
//此规范可以用适配器模式解决,不必手动去关闭了
二十七:
尽量不要在构造方法里初始化.
Person{
publicPerson(){
Personperson=newPerson();
add();
publicPerson()
Unknownmacro:
{
//尽量少做些不必要的事情
}
因为在构造器里初始化没办法控制,构造器多了也容易出现混乱。
如果有反射机制,也许会跳过构造方法。
二十八:
函数的返回值类型(如果有的话)要和其功能相匹配,要符合常规思维.
得到一个用户的姓名
publicStringgetPeopleName()
return"
userName"
得到一个用户的姓名的方法
publicStringgetUserName(){
是得到一个用户的姓名,而不是得到一个人的姓名,因为人不一定是用户,所以用getUserName更准确一点
二十九:
内部类的变量不要设为全局变量,尽量少用全局变量.
三十:
如果是布尔型的变量则最好在命名用is或has开头。
例如:
isVisible,isExists等.
booleanisTrue=resultSet.next();
booleanhasNext=resultSet.next();
难懂,且没有任何意义。
三十一:
如果变量命名要加注释,说明命名不是很准确.
三十二:
任何类字段除非必要,否则都要私有化.
publicclassPerson
Stringname;
Stringsex;
intage;
publicclassClassName
privateStringname;
privateStringsex;
privateintage;
没有为程序的安全考虑。
可以被其他的类访问
三十三:
尽量减少一个类属性的作用域,在离使用它的最近的地方定义.
intindex=1;
//类似这种情况变量生命离使用地方有点远
insertintostudent(ID,name,password,sex,address)values(?
PreparedStatementpreparedStatement=connection.prepareStatement(sql);
preparedStatement.setString(index++,user.getID());
preparedStatement.setString(index++,user.getName());
preparedStatement.setString(index++,user.getPassword());
preparedStatement.setString(index++,user.getSex());
preparedStatement.setString(index++,user.getAddress());
preparedStatement.executeUpdate();
preparedStatement.close();
当别人维护易引起混淆,容易引发错误
三十四:
单例模式的使用必须要考虑到同步.
//没有使用到同步
publicstaticConnectiongetConnection()throwsClassNotFoundException,SQLException{
if(conn==null){
Class.forName("
com.p6spy.engine.spy.P6SpyDriver"
conn=
DriverManager.getConnection("
jdbc:
mysql:
//localhost:
3306/test"
root"
"
returnconn;
}
//最熟悉的得到一个Connection连接
publicstaticsynchronizedConnectiongetConnection()throwsClassNotFoundException,SQLException{
if(conn==null){
Class.forName("
conn=
returnconn;
当有多个用户并发使用的时候会造成数据的混乱,导致线程不安全
三十五:
方法里面