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 在软件开发的过程中总是强调注释的规范,但 ...
随机推荐
- POJ 3126 Prime Path
给定两个四位素数a b,要求把a变换到b 变换的过程要保证 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数 与 前一步得到的素数 只能有一个位不同,而且每步得到的素数都不能 ...
- W.Richard Stevens sock program
在<TCP/IP卷一>中有一个程序sock,Stevens的主页上有,但是在LINUX下通常无法工作(那时还没有LINUX),经过百度,发现http://www.icir.org/chri ...
- 小游戏Step表
[Config]1|0|0|2|172,120,134|公主的记忆|1|2[Config] [Config]2|1|1|2|172,120,134|公主的记忆|1|2[Config] [Config] ...
- 个人c语言编程风格总结
总结一下我个人的编程风格及这样做的原因吧,其实是为了给实验室写一个统一的C语言编程规范才写的.首先声明,我下面提到的编程规范,是自己给自己定的,不是c语言里面规定的. 一件事情,做成和做好中间可能隔了 ...
- python 中BeautifulSoup入门
什么是BeautifulSoup? Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的 ...
- 基于Jforum开源项目的论坛网站
基于Jforum开源项目的论坛网站 开发原因: 刚完成了以wordpress及其插件simple-press为基础的论坛网站,因为一直从事java方面开发, 所以尝试一下使用java开源项目Jforu ...
- (转)客户端触发Asp.net中服务端控件事件
第一章. Asp.net中服务端控件事件是如何触发的 Asp.net 中在客户端触发服务端事件分为两种情况: 一. WebControls中的Button 和HtmlControls中的Type为su ...
- php 循环删除目录中的过期文件
$savepath1 = 'Public/biaoqian/upload'; $path1 = dir($savepath1); while (($ ...
- java中Jbutton常用设置
. 对JButton大小的设置 ——因为JButen是属于小器件类型的,所以一般的setSize不能对其惊醒大小的设置,所以一般我们用 button.setPreferredSize( ...
- aspx在页面跳转(Response.Redirect)时丢失session问题及解决办法
[问题描述] 假设a.aspx.cs页面保存有Session["empid"]="3",当a.aspx.cs通过Response.Redirect(" ...