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 在软件开发的过程中总是强调注释的规范,但 ...
随机推荐
- 做App还是微信公众号,你该如何抉择?
我不够聪明,因为我经常出于好奇被自己提出的问题所困扰,于是乎就有些强迫症似的拼命去寻求答案——我只是想说服自己,让自己从困扰的谜团中清醒.坚定方向,进而能从容不迫的走下去... 最近在考虑一个问题:做 ...
- Game02 最新版本2.0.0
Game02发布转站于此,欢迎大家下载.... 简介: Game02是由ImGenius开发的一款即时在线小游戏.玩法简单,易于上手,主要靠技术,不会出现不要脸的充值等内容. 操控方法:W和A左右移动 ...
- 绑定多个ddl
添加材料,需要绑定材料类型.设备名称.省份和所属终端客户等信息,前台页面如下: 前台.aspx <asp:Content ID="Content2" ContentPlace ...
- C# 发送HttpWebRequest获得网络图片的大小、尺寸
可以通过HttpWebRequest的方式发送一个网络图片的请求,再通过HttpWebResponse接收返回的数据,分析数据流得到图片的大小以及尺寸,代码如下: /// <summary> ...
- 用java实现简易PC版2048
import java.awt.Color; import java.awt.EventQueue; import java.awt.BorderLayout; import java.awt.Flo ...
- 在Spring tools suite中使用git 共享项目
我们都在eclipse 和 myeclipse中使用过cvs 和 svn 版本控制工具进行团队开发,今天我学习了另外一种版本控制工具git,下面我演示如何在Spring tools suite中使用g ...
- sass安装记录
之前曾经安装过一次sass,不过可惜没使用,现在换了电脑重新安装,又上网找了些资料,终于安装成功,现在就当做个记录方便下次安装. 首先 到官网下载个最新版的ruby :http://rubyinsta ...
- Spring(3)
一.Spring容器 Spring 提供了两种类型的IOC容器(后面还会讲到AOP容器): (1)BeanFactory:IOC容器的基本实现,是Spring框架的基础设施,面向Spring的本身 ( ...
- i7 4790 z97-ar ssd 固态硬盘 装机的一些经历
今天电脑终于装好了,我于七夕情人节前后的几天配了一台台式机用开发,期间遇到了一些问题与大家分享一下,希望对一些朋友有帮助. 1 买HIMD线,各个零件全部组装好后,我意识到一个问题没买HIMD线,我的 ...
- z-index 可以使用负值,CSS相对定位、绝对定位利器
很多技巧都是在工作中测试出来的,我搞DIV+CSS前端开发,现在是安卓收藏家,日常也有很多技巧,刚刚突然发现的这个技巧,真的很实用:Z-index值可以使用负值. z-index是个很强大的属性,是个 ...