Java高级规范之三
三十一、如果变量名要加注释,说明命名不是很准确。
不规范示例:暂无
规范实例:暂无
解析:暂无
三十二、任何类字段除非必要,否则都要私有化
不规范示例:
public class Person{
String name;
String sex;
int age;
}
规范示例:
public class ClassName{
private String name;
private String sex;
private int age;
}
解析:没有为程序的安全考虑,可以被其他的类访问
三十三、尽量减少一个类属性的作用域,在离使用它的最近的地方定义。
不规范示例:
int index = 1;//类似这种情况,变量声明离使用的地方有些远。
String sql = "insert into Student(ID,name,password,sex,address)Values(?,?,?,?,?)"
PreparedStatement preparedStatement= 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();
规范示例:
String sql= "insert into Student(ID,name,password,sex,address)Values(?,?,?,?,?)"
PreparedStatement preparedStatement= connection.prepareStatement(sql);
int index = 1;
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();
解析:当别人维护时容易引起混淆,容易引发错误。
三十四、单例模式的使用必须要考虑同步。
不规范示例:
public static Connection conn=null;
//没有使用同步
public static Connection getConnection()throws ClassNotFoundException,SQLException{
if(){
if(conn==null){
Class.forName("com.p6spy.engine.spy.P6SpyDriver");
conn=DriverManager.getConnection("jdbc:mysql://locallhost:3306/test", "root","root");
}
return conn;
}
规范示例:
//最熟悉地得到一个Connection连接
public static Connection conn=null;
public static synchronized Connection getConnection()throws ClassNotFoundException,SQLException{
if(){ if(conn==null){
Class.forName("com.p6spy.engine.spy.P6SpyDriver");
conn=DriverManager.getConnection("jdbc:mysql://locallhost:3306/test", "root","root");
}
return conn;
}
解析:当有多个用户并发使用的时候会造成数据的混乱,导致线程不安全
三十五、方法里面参数最好不要超过三个。
不规范示例:
public void update(int id,String name,String code,String sex){
........................
}
规范示例:
public void update(int id,String,name,String sex){
........................
}
//如果参数超过三个,必须把数据封装成一个pojo
//如把上面的update方法中的参数封装起来
public class User(){
private int id;
private String code;
private String name;
public String getName(){return name;}
public void setName(String name){this.name=name;}
public void String getCode(){return code;}
public void setCode(String code){this.code=code;}
public void setId(int id){this.id=id;}
public void getId{return id;
}
......................
public void update(User user){
..................
}
解析:参数多容易出现错误,尤其是调用的时候,如果参数的顺序传错误,将是一个非常大的麻烦,而且没有拓展性
三十六、值类或值对象必须重写toString方法。
不规范示例:
public calss Code{
private int id;
private String code;
private String name;
private String sex;
public String getSex(){return sex;}
public void setSex(String sex){this.sex=sex;}
public String getName(){return name;}
public void setName(String name){this.name=name;}
public void String getCode(){return code;}
public void setCode(String code){this.code=code;}
public void getId{return id;}
public void setId(int id){this.id=id;}
}
规范示例:
public calss Person{
private int id;
private String code;
private String name;
private String sex;
public String getSex(){return sex;}
public void setSex(String sex){this.sex=sex;}
public String getName(){return name;}
public void setName(String name){this.name=name;}
public void String getCode(){return code;}
public void setCode(String code){this.code=code;}
public void getId{return id;}
public void setId(int id){this.id=id;}
public String toString(){
return new StringBuffer().append(id+",").append(name+",").append(sex).toString();
}
}
解析:toString的作用是以字符串的形式返回它的实例信息,因为不同的类的信息是不同的,所以要重写,不能全部都继承Object的toString方法。
三十七、重写equals方法的时候,必须重写hashCode方法。
不规范示例:
public class People{
//必要的属性
//必要的get和set方法
//toString方法
没有hashCode方法
没有equals方法
}
规范示例:
public class People{
//必要的属性
//必要的get和set方法
//toString方法
public int hashCode(){
final int prime = 37;
int result =1;
result = prime * result +id;
result = prime * result +((name==null)?0:name.hashCode());
result = prime * result +((sex==null)?0:sex.hashCode());
return result;
}
public boolean equals(Object obj){
if(this==obj) return true;
if(obj==null) return false;
if(getClass()!=obj.getClass()) return false;
People other = (People)obj;
if(id!=other.id) return false;
if(name==null){
if(other.name!=null) return false;
} else if(!name.equals(other.name)) return false;
if(sex==null){
if(other.sex!=null) return false;
}else if(!sex.equals(other.sex)) return false;
return true;
}
}
解析:重写equals和hashcode方法是为了像Set一样不能存储重复的元素,并实现Serializable是为了使这个类可以序列化
三十八、单元测试的时候必须是对象比较,如果一个字段有100个字,有时候数据库会自动删除一些,此时我们就不知道程序哪儿出bug了。
不规范示例:暂无
规范示例:暂无
解析:实用的开放经验
三十九、单元测试类的类名后面要加Test。
不规范示例:
//这是一个UserDAO的单元测试类
public class UserDAO{}
规范示例:
public class UserDAOTest{}
解析:这样写是让别人知道这个类是用做测试的,清晰易懂。
四十、操作提示颜色,成功用蓝色字体,错误用红色字体。
不规范示例:暂无
规范示例:暂无
解析:实用的开放经验
Java高级规范之三的更多相关文章
- Java高级规范之二
二十一.提交java代码前应该检查是否有没用的语句,如:System.out.println(); jsp页面上面是否有alert调试信息 不规范示例:暂无 规范实例:暂无 解析:因为如果保留了有可能 ...
- java高级规范之一
一.不允许使用汉语拼音命名 不规范示例: public void zengjiaYongHu{}//拼音方法名称 规范示例: public void addUser(){} 解析:应该使用国际化语音, ...
- Java高级规范之四
四十一.控制层不能调用model层除了最顶级的接口外的任何内容.要通过new顶级接口才能调用. 不规范示例: public class UserServiceImpl{ private UserDAO ...
- JAVA语言编程格式高级规范
作为一位开发人员,都要有严格的代码规范.为此我总结了一些代码规范案例. 目 录 1. 前言 2. 试用范围 3. JAVA命名规范-- 3.1 公共约定 3.2 Java文件.包 3.3 类.接口 ...
- JAVA语言规范-线程和锁章节之同步、等待和通知
JAVA语言规范:线程和锁 1 同步 java编程语言提供了线程间通信的多种机制.这些方法中最基本的是同步化,此方法是使用监视器实现的.JAVA中每个对象与一个监视器相关联,一个线程可以加锁和解锁监视 ...
- 黑马程序员——Java高级应用(一)
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- JAVA代码规范笔记(上)
本文为<code conventions-150003>(JAVA代码规范)笔记. 文件组织 1.超过2000行代码的源文件将会比较难以阅读,应该避免. 2.每个Java源文件都包含单一的 ...
- 《深入理解Java虚拟机》-----第8章 虚拟机字节码执行引擎——Java高级开发必须懂的
概述 执行引擎是Java虚拟机最核心的组成部分之一.“虚拟机”是一个相对于“物理机”的概念 ,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上的,而 ...
- Java注释规范整理
Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00018736 在软件开发的过程中总是强调注释的规范,但 ...
随机推荐
- ldconfig和ldd用法
一.ldconfig ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig. ldconfig 命令的用途,主要是在默认搜寻目录(/ ...
- [转载]什么是FCKeditor?功能强大的HTML编辑器!
天天在用FCKeditor写博客,但一直不清楚FCKeditor到底是什么,今天终于找到了一些相关的资料,大家一起来分享下. FCKeditor文本编辑程序(共享软件)为用户提供在线的文档编辑服务,其 ...
- AJAX格式
var xmlHttp;function getXmlHttp(){ if(window.ActiveXObject){ xmlHttp = new ActiveXObject("MICRO ...
- SharePoint 2010 + 左侧导航(Left Nav Bar)二级菜单的修改
SharePoint 2010 + 修改左侧导航类似顶部导航菜单的样式 查找aspmenu的控件,ID为“V4QuickLaunchMenu”,修改分别将属性“StaticDisplayLevels” ...
- 商品sku规格选择效果,没有商品的不能选中,选择顺序不影响展示结果
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 【67测试20161116】【数论】【DP】【思维】
第一题: LGTB 得到了一个序列,他想在这个序列中选择一个最长的连续子序列,使得这个子序列的最大公约数等于1.请告诉他他能得到的最大长度,如果没有这样的序列,输出-1. 对于50% 的数据,1 &l ...
- MS SQLSERVER中如何快速获取表的记录总数
在数据库应用的设计中,我们往往会需要获取某些表的记录总数,用于判断表的记录总数是否过大,是否需要备份数据等.我们通常的做法是:select count(*) as c from tableA .然而对 ...
- 不支持关键字“data source”
网上大部分都是说data source之间需要插入一个空格或者都是一些低级的拼写错误造成的,但是我没有出现这些情况,是通过把data source改成server解决的,具体config里面的代码如下 ...
- SQL 常用函数
--将字符串中从某个字符开始截取一段字符,然后将另外一个字符串插入此处 select stuff('hi,world!',4,4,'****') --返回值hel****orld! --返回从指定 ...
- 进程间通信--fork函数
#include <unistd.h> pid_t fork(void); fork() creates a new process by duplicating the calling ...