1java编码技巧
1. 把字符串常量放在前面
java编码技巧有哪些?通过把字符串常量放在比较函数equals()比较项的左侧来防止偶然的NullPointerException 从来都不是一个坏主意。这是毫无疑问的,把一种表达式转换成另一种更好的表达式,并不会失去什么。只要我们的Options是真实存在的(Java 8中 Optional是对可以为空的对象进行的封装),不是吗?讨论一下…
2. 不要相信早期的JDK APIs
Java刚出现的时候,编程一定是件很痛苦的事。如果抽象路径名表示的不是一个目录,那么这个方法返回null。否则返回一个字符串数组,其中每个字符串表示当前目录下的一个文件或目录。是的,再加上判空检查,以确保正确:糟糕!前者违反了 Java 编码中 10 个微妙的最佳实践 的规则#5和#6。因此一定要记得判 null检查!
3. 不要相信“-1”
我知道这很偏执,Javadoc中关于 String.indexOf() 的早期描述是这样的…“字符在字符序列中第一次出现的位置将作为结果[被返回],如果字符不存在则返回-1。”
所以,-1 就可以理所当然被拿来用,对吗?谁知道呢。也许在某个特定场合下他们将会需要另一种 编码值,如果不区分大小写的话,otherString 就会被包含进去…此时或许可以返回 -2呢?谁知道呢。毕竟,我们有非常多关于NULL——价值亿万美金的错误的讨论。为什么不开始讨论 -1呢,某种意义上来说 -1 是 null 在int类型下的另一种形式。
4. 避免意外的赋值
是的。即使最优秀的程序员也可能犯这种错误(当然,不包括我。看#7)。(假设这是JavaScript,我们暂且偏执地认为是这种语言)再说一遍。如果你的表达式中有常量,将它放在等式左边。这样当你打算再添加一个 = 时,不容易出错。
2java编码规范
一、命名规范
已经被使用的常量,不要重新定义;约定俗成的常量含义,不要重新定义。努力避免硬编码。
每个模块,建议有独立的常量类。方法名都以lowerCamelCase风格编写;类名都以UpperCamelCase风格编写;参数名以lowerCamelCase风格编写。
局部变量名以lowerCamelCase风格编写,比起其它类型的名称,局部变量名可以有更为宽松的缩写。
虽然缩写更宽松,但还是要避免用单字符进行命名,除了临时变量和循环变量。即使局部变量是final和不可改变的,也不应该把它示为常量,自然也不能用常量的规则去命名它。
二、函数/方法
public 函数(方法),对象参数 必须要处理参数为null的情况,private 函数,对象参数 可以不用处理参数为null的情况(依情况而定),方法名都以lowerCamelCase 开头单词小写后面驼峰风格编写。方法长度不超过50行。
三、嵌套层级不要超过3层。
for,while,if ,switch 等。方法中条件不成立直接return,不再向下执行。
如:
public int xxx (String userId, String password, String email){
if(StringUtils.isEmpty(userId) || StringUtils.isEmpty(email)
||StringUtils.isEmpty(password)){
return null;
}
UserEntity ue = EntityProxy.OBJ.get(userId, UserEntity.class);
if(ue == null){
return null;
}
……...
}
避免前套层次过深,建议不超过三层
3java编码格式
ASCII 码
学过计算机的人都知道 ASCII 码,总共有 128 个,用一个字节的低 7 位表示,0~31 是控制字符如换行回车删除等;32~126 是打印字符,可以通过键盘输入并且能够显示出来。
ISO-8859-1
128 个字符显然是不够用的,于是 ISO 组织在 ASCII 码基础上又制定了一些列标准用来扩展 ASCII 编码,它们是 ISO-8859-1~ISO-8859-15,其中 ISO-8859-1 涵盖了大多数西欧语言字符,所有应用的最广泛。ISO-8859-1 仍然是单字节编码,它总共能表示 256 个字符。
GB2312
它的全称是《信息交换用汉字编码字符集 基本集》,它是双字节编码,总的编码范围是 A1-F7,其中从 A1-A9 是符号区,总共包含 682 个符号,从 B0-F7 是汉字区,包含 6763 个汉字。
GBK
全称叫《汉字内码扩展规范》,是国家技术监督局为 windows95 所制定的新的汉字内码规范,它的出现是为了扩展 GB2312,加入更多的汉字,它的编码范围是 8140~FEFE(去掉 XX7F)总共有 23940 个码位,它能表示 21003 个汉字,它的编码是和 GB2312 兼容的,也就是说用 GB2312 编码的汉字可以用 GBK 来解码,并且不会有乱码。
GB18030
全称是《信息交换用汉字编码字符集》,是我国的强制标准,它可能是单字节、双字节或者四字节编码,它的编码与 GB2312 编码兼容,这个虽然是国家标准,但是实际应用系统中使用的并不广泛。
UTF-16
说到 UTF 必须要提到 Unicode(Universal Code 统一码),ISO 试图想创建一个全新的超语言字典,世界上所有的语言都可以通过这本字典来相互翻译。可想而知这个字典是多么的复杂,关于 Unicode 的详细规范可以参考相应文档。Unicode 是 Java 和 XML 的基础,下面详细介绍 Unicode 在计算机中的存储形式。
UTF-16 具体定义了 Unicode 字符在计算机中存取方法。UTF-16 用两个字节来表示 Unicode 转化格式,这个是定长的表示方法,不论什么字符都可以用两个字节表示,两个字节是 16 个 bit,所以叫 UTF-16。UTF-16 表示字符非常方便,每两个字节表示一个字符,这个在字符串操作时就大大简化了操作,这也是 Java 以 UTF-16 作为内存的字符存储格式的一个很重要的原因。
UTF-8
UTF-16 统一采用两个字节表示一个字符,虽然在表示上非常简单方便,但是也有其缺点,有很大一部分字符用一个字节就可以表示的现在要两个字节表示,存储空间放大了一倍,在现在的网络带宽还非常有限的今天,这样会增大网络传输的流量,而且也没必要。而 UTF-8 采用了一种变长技术,每个编码区域有不同的字码长度。不同类型的字符可以是由 1~6 个字节组成。
4java乱码问题处理
1、关于配置Tomcat的URIEncoding
问题:程序需要发送http GET请求到服务器,请求的参数中包含了中文字符。程序中参数为UTF-8格式,且经过了UTF-8 URL编码再发送。使用的tomcat服务器,但服务器端后台程序中取到的参数的中文是乱码。
解决方法:修改Tomcat的Server.xml,在Connector标签中加上URLEncoding参数。
内容:maxSpareThreads="75" enableLookups="false" redirectPort="8443"
acceptCount="100" debug="99" connectionTimeout="20000"
disableUploadTimeout="true" URIEncoding="UTF-8"/>
2、http请求乱码问题
post请求出现乱码:
解决方法:在servlet页面添加
response.setCharcacterEncoding("utf-8")
get请求出现乱码:
解决方法:在后台获取字符串后对编码进行转化,如常见的编码ISO-8859-1,代码如下
String name = request.getParameter("name");
name=new String(name.getBytes("ISO-8859-1","utf-8"))
3、Html中文乱码
问题:htmll出现乱码的主要原因是html源代码内中文字内容与html编码不同造成。网页的编码是gbk,而中文的是utf-8