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 在软件开发的过程中总是强调注释的规范,但 ...
随机推荐
- 用 QGIS 画矢量交通路线图
一.准备工作 1.安装插件 为了方便画图,我们安装了OpenLayers,QuickOSM两个插件. 如何安装插件,度娘上都有答案.下图中打勾的部分为安装好的插件: OpenLayers提供了一些开放 ...
- oracle 存储过程访问其他用户的表
用户user2想在存储过程中查询用户User1的表table1, 在PL/SQL中用user1登陆,执行以下语句即可: grant select on User1.table1 to user2;
- <java基础学习>02JAVA的基础组成(2)
60000-0000 0000-0000 0000-0000 0000-0110 0000-0110 -6这个数的正数的二进制取反,再加1 0000-0110取反: 1111-1001 + 0000- ...
- JavaScript 字符串常用操作
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- MicroERP更新记录2.2:增加B/S查询功能
提供电脑版及手机版两种浏览方式,仅仅作为一个DEMO展示,由于系统内置报表比较复杂,待广泛收集用户需求之后再逐步完善. 网页文件在安装包内web文件夹中. 下载地址:60.2.39.130/micro ...
- RBAC类的方法
rbac类的 方法 authenticate($map,$model='')方法 传入查询用户的条件和用户表的MODEL 返回数组包含用户的信息 saveAccessList($authId=null ...
- UIButtonTypeSystem backBarButtonItem
当UIButton是UIButtonTypeSystem类型时,改变UIButton的frame,系统会有一个动画改变效果,不想要这个效果,将类型改为UIButtonTypeCustom. backB ...
- 如何使用.NET开发全版本支持的Outlook插件产品(一)——准备工作
这半年一直在做Outlook的插件,因为不会VC++,所以想找一款基于.NET,用C#开发Outlook插件的技术方案.没想到,光技术选型这件事,就用各种技术手段验证了将近一个月,还花费了大量的精力做 ...
- GoldenGate Studio 12.2.1.1发布
OGG studio是一款图形化OGG配置部署产品,其主要特性:1. 逻辑层面设计OGG,不需要了解OGG细节:2. 最值实践加快常用场景的配置:3. 使用拖拉映射,自动匹配源和目标对象:4. 一键部 ...
- ubuntu更新源(Package has no installation candidate 的问题)
最近将公司的台式机安装了ubuntu16.04,安装之后,使用apt-get install openssh-server 发现出现:Package 'openssh-server' has no i ...