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 在软件开发的过程中总是强调注释的规范,但 ...
随机推荐
- Android随
Android的UI也是线程不安全的,如果想要更新应用程序里的UI元素,则必须在主线程中进行,否则就会出现异常. Android中的异步消息处理机制主要由四个部分组成,Message,Handle ...
- Ubuntu 下 kazam 录屏 没声音解决方案
以下内容参考https://www.youtube.com/watch?v=5NZ0qwp2L04,我做了些修改,让它好懂些. 在应用商店里搜索 PulseAudio Volume Control 在 ...
- POJ 3176 Cow Bowling
Cow Bowling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13016 Accepted: 8598 Desc ...
- C++中的static关键字的总结
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
- Android中日期函数Calendar的一些用法和注意事项
1.月份获取时加1 Canlendar.MONTH + 1 因为使用的是罗马历,Calendar.MONTH返回的数值不是一年中月份的值,而是当前月份距离第一个月份的差值 如:当前月份为9月份,距离1 ...
- HDU 1005 Number Sequence
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- MFC listcontrol导出excel表格
// 导出ExcelCString CBackGroundDlg::ExportAsExcel(CString filename, CListCtrl &resultlist, CWnd * ...
- keil uvision3 添加 STC单片机库
本人工作以来,一直从事仪表程序维护和开发工作,使用的清一色的都是microchip单片机。现在弄一个光立方的小玩意,需要用STC单片机。它有特点很明显,方便、资料多、最重要的一点便宜。 网上下载的ke ...
- 解决maven创建web项目卡死在generator插件(转)
如下图所示:在Properties中添加一个参数archetypeCatalog=internal,不加这个参数,在maven生成骨架的时候将会非常慢,有时候会直接卡住. 理由 archetypeCa ...