在进行java编程的时候,如果我们马虎就会导致各种问题,尤其是对于新手来说,本来就不是很熟悉,如果再不用心,那么要写好代码还是需要花很多时间的,那java新手编程常见问题有哪些?下面来我们就来给大家讲解一下。
一、字符串连接误用
错误的写法:
String s = ""; for (Person p: persons) { s += ", " + p.getName(); } s = s.substring(2); //remove first comma
正确的写法:
StringBuilder sb = new StringBuilder(persons.size() * 16); // well estimated buffer for (Person p: persons) { if (sb.length() > 0) sb.append(", "); sb.append(p.getName); }
二、测试字符串相等性
错误的写法:
if (name.compareTo("John") == 0) ... if (name == "John") ... if (name.equals("John")) ... if ("".equals(name)) ...
上面的代码没有错,但是不够好。compareTo不够简洁,==原义是比较两个对象是否一样。另外比较字符是否为空,最好判断它的长度。
正确的写法:
if ("John".equals(name)) ... if (name.length() == 0) ... if (name.isEmpty()) ...
三、请使用XML解析器
错误的写法:
int start = xml.indexOf("") + "".length(); int end = xml.indexOf(""); String name = xml.substring(start, end);
正确的写法:
SAXBuilder builder = new SAXBuilder(false); Document doc = doc = builder.build(new StringReader(xml)); String name = doc.getRootElement().getChild("name").getText();
四、未指定字符编码
错误的写法:
Reader r = new FileReader(file); Writer w = new FileWriter(file); Reader r = new InputStreamReader(inputStream); Writer w = new OutputStreamWriter(outputStream); String s = new String(byteArray); // byteArray is a byte[] byte[] a = string.getBytes();
这样的代码主要不具有跨平台可移植性。因为不同的平台可能使用的是不同的默认字符编码。
正确的写法:
Reader r = new InputStreamReader(new FileInputStream(file), "ISO-8859-1"); Writer w = new OutputStreamWriter(new FileOutputStream(file), "ISO-8859-1"); Reader r = new InputStreamReader(inputStream, "UTF-8"); Writer w = new OutputStreamWriter(outputStream, "UTF-8"); String s = new String(byteArray, "ASCII"); byte[] a = string.getBytes("ASCII");
五、无限使用heap内存
错误的写法:
byte[] pdf = toPdf(file);
这里有一个前提,就是文件大小不能讲JVM的heap撑爆。否则就等着OOM吧,尤其是在高并发的服务器端代码。最好的做法是采用Stream的方式边读取边存储(本地文件或database)。
正确的写法:
File pdf = toPdf(file);
另外,对于服务器端代码来说,为了系统的安全,至少需要对文件的大小进行限制。
六、忽略所有异常
错误的写法:
try { doStuff(); } cach(Exception e) { log.fatal("Could not do stuff"); } doMoreStuff();
这个代码有两个问题, 一个是没有告诉调用者, 系统调用出错了. 第二个是日志没有出错原因, 很难跟踪定位问题。
正确的写法:
try { doStuff(); } catch (Exception e) { throw new MyRuntimeException("Could not do stuff because: " + e.getMessage, e); }
在进行java编程的时候,我们一定要认真细心,注意一些细节问题,因为很多时间就是一些小细节就会导致代码的错误,因此大家要多实践多记,这样就不会出现问题了!最后大家如果想要了解更多java常见问答知识,敬请关注奇Q工具网。
推荐阅读: