现在的位置: 首页 > 综合 > 正文

Java编程最差实践

2013年10月19日 ⁄ 综合 ⁄ 共 2484字 ⁄ 字号 评论关闭

原文地址:http://www.odi.ch/prog/design/newbies.php 
每天在写Java程序, 其实里面有一些细节大家可能没怎么注意, 这不, 有人总结了一个我们编程中常见的问题. 虽然一般没有什么大问题, 但是最好别这样做. 另外这里提到的很多问题其实可以通过Findbugs(http://findbugs.sourceforge.net/ )来帮我们进行检查出来. 
字符串连接误用 
 错误的写法: 

Java代码  收藏代码
  1. String s = "";  
  2. for (Person p : persons) {  
  3.     s += ", " + p.getName();  
  4. }  
  5. s = s.substring(2); //remove first comma  


 正确的写法: 

Java代码  收藏代码
  1. StringBuilder sb = new StringBuilder(persons.size() * 16); // well estimated buffer  
  2. for (Person p : persons) {  
  3.     if (sb.length() > 0) sb.append(", ");  
  4.     sb.append(p.getName);  
  5. }  


错误的使用StringBuffer 
 错误的写法: 

Java代码  收藏代码
  1. StringBuffer sb = new StringBuffer();  
  2. sb.append("Name: ");  
  3. sb.append(name + '\n');  
  4. sb.append("!");  
  5. ...  
  6. String s = sb.toString();  


问题在第三行, append char比String性能要好, 另外就是初始化StringBuffer没有指定size, 导致中间append时可能重新调整内部数组大小. 如果是JDK1.5最好用StringBuilder取代StringBuffer, 除非有线程安全的要求. 还有一种方式就是可以直接连接字符串.
缺点就是无法初始化时指定长度. 

 正确的写法: 

Java代码  收藏代码
  1. StringBuilder sb = new StringBuilder(100);  
  2. sb.append("Name: ");  
  3. sb.append(name);  
  4. sb.append("\n!");  
  5. String s = sb.toString();  


或者这样写: 

Java代码  收藏代码
  1. String s = "Name: " + name + "\n!";  


测试字符串相等性 
 错误的写法: 

Java代码  收藏代码
  1. if (name.compareTo("John") == 0) ...  
  2. if (name == "John") ...  
  3. if (name.equals("John")) ...  
  4. if ("".equals(name)) ...  


上面的代码没有错, 但是不够好. compareTo不够简洁, ==原义是比较两个对象是否一样. 另外比较字符是否为空, 最好判断它的长度. 
 正确的写法: 

Java代码  收藏代码
  1. if ("John".equals(name)) ...  
  2. if (name.length() == 0) ...  
  3. if (name.isEmpty()) ...  


数字转换成字符串 
 错误的写法: 

Java代码  收藏代码
  1. "" + set.size()  
  2. new Integer(set.size()).toString()   


 正确的写法: 

Java代码  收藏代码
  1. String.valueOf(set.size())  


利用不可变对象(Immutable) 
 错误的写法: 

Java代码  收藏代码
  1. zero = new Integer(0);  
  2. return Boolean.valueOf("true");  


 正确的写法: 

Java代码  收藏代码
  1. zero = Integer.valueOf(0);  
  2. return Boolean.TRUE;  


请使用XML解析器 
 错误的写法: 

Java代码  收藏代码
  1. int start = xml.indexOf("<name>") + "<name>".length();  
  2. int end = xml.indexOf("</name>");  
  3. String name = xml.substring(start, end);  


 正确的写法: 

Java代码  收藏代码
  1. SAXBuilder builder = new SAXBuilder(false);  
  2. Document doc = doc = builder.build(new StringReader(xml));  
  3. String name = doc.getRootElement().getChild("name").getText();  


请使用JDom组装XML 
 错误的写法: 

Java代码  收藏代码
  1. String name = ...  
  2. String attribute = ...  
  3. String xml = "<root>"  
  4.             +"<name att=\""+ attribute +"\">"+ name +"</name>"  
  5.             +"</root>";  


 正确的写法: 

Java代码  收藏代码
  1. Element root = new Element("root");  
  2. root.setAttribute("att", attribute);  
  3. root.setText(name);  
  4. Document doc = new Documet();  
  5. doc.setRootElement(root);  
  6. XmlOutputter out = new XmlOutputter(Format.getPrettyFormat());  
  7. String xml = out.outputString(root);  


XML编码陷阱 
 错误的写法: 

Java代码  收藏代码

    抱歉!评论已关闭.