Java程序员要注意的10个问题————————好东西就是要拿来分享

【本文来自优优码:http://www.uucode.net/201406/ten-issue-for-java】,好东西就是要拿来分享

1. Array 转为 ArrayList

很多人会这么写:


1

List<String> list = Arrays.asList(arr);

但是要知道,虽然Arrays.asList()是这么实现的:


1
2
3

public static <T> List<T> asList(T... a) {
    return new ArrayList<T>(a);
}

但是这里的ArrayList是Arrays的一个static 静态类,不是java.util,ArrayList
所以,应该这么写:


1

ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));

2. 判断是否数组里含有某个值


1
2

Set<String> set = new HashSet<String>(Arrays.asList(arr));
return set.contains(targetValue);

上面的写法虽然可以工作,但是没必要转为set呀,应该这么写:


1

Arrays.asList(arr).contains(targetValue);

3. 在循环里移除List的元素


1
2
3
4
5

ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
for (int i = 0; i < list.size(); i++) {
    list.remove(i);
}
System.out.println(list);

这没写是想把元素全部移走吧。但是不行哦。因为在迭代时改变被迭代对象很容易出问题。他的返回是:


1

[b, d]

当然,如果你用了for也是不行的:


1
2
3
4
5
6

ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
 
for (String s : list) {
    if (s.equals("a"))
        list.remove(s);
}

以上代码抛出ConcurrentModificationException.就是因为迭代的时候,修改被迭代对象。
应该这么写,显示得使用迭代器:


1
2
3
4
5
6
7
8
9

ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
Iterator<String> iter = list.iterator();
while (iter.hasNext()) {
    String s = iter.next();
 
    if (s.equals("a")) {
        iter.remove();
    }
}

4. Hashtable 和 HashMap

Hashtable和HashMap内在的算法其实是差不多的。但是他们所处于的类族不同,一个在Collection里,一个在Dictionary里。
当然,最关键是的是Hashtable是同步的,而HashMap 不是。但一般来说,你还是用HashMap 吧!

5.使用原始类型的集合

Java5开始支持了泛型,但是很多人可能都不懒得用。喜欢什么Set这种的。考虑以下代码:


1
2
3
4
5
6
7
8

public static void add(List list, Object o){
    list.add(o);
}
public static void main(String[] args){
    List<String> list = new ArrayList<String>();
    add(list, 10);
    String s = list.get(0);
}

上面的代码可以编译通过,但是在运行时会有
Exception in thread “main” java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at …
原因就是因为使用raw type,因此在编译时得不到类型检查。

6. 访问级别

不要偷懒 在属性上使用public,这样你不好控制权限。在什么时候被修改,你都不知道。

7. ArrayList vs. LinkedList

参考 《Java程序性能优化》吧!有详细的说明。这里不多说了。一个比较基础的问题

8. 可变和不可变

记住,String是不可变的。就是说当


1
2
3
4

String result="";
for(String s: arr){
    result = result + s;
}

当你这么做的时候,其实你在不断的产生新的String,而不是修改同一个String。但是,JDK会在编译时做优化,把上面的代码用StringBuilder重新实现一下。具体也可以参考《Java程序性能优化》

9. 子类和父类的构造函数

在Java中,一个类如果没有申明构造函数,Java会自动生成一个不带参数的构造函数。但是,如果已经声明了一个,Java就不会再生成那个构造函数了。
但是不幸的是,子类总是会调用父类的无参构造函数,所以,请一定要让父类有一个无参的构造函数,保证你编译能通过。

10. String使用””还是new


1
2
3
4
5
6
7
8
9

String a = "abcd";
String b = "abcd";
System.out.println(a == b);  // True
System.out.println(a.equals(b)); // True
 
String c = new String("abcd");
String d = new String("abcd");
System.out.println(c == d);  // False
System.out.println(c.equals(d)); // True

这个也不多少了,String不可变已经常量池的问题。这里注意String还有一个方法是intern(),返回常量池的引用。
我又要提《Java程序性能优化》了,里面有对String的说明,讲过这个问题。有兴趣的读者可以去看看。

Java程序员要注意的10个问题————————好东西就是要拿来分享

时间: 2024-10-11 22:20:32

Java程序员要注意的10个问题————————好东西就是要拿来分享的相关文章

Java程序员常犯的10个错误

本文总结了Java程序员常犯的10个错误. #1. 把Array转化成ArrayList 把Array转化成ArrayList,程序员经常用以下方法: List<String> list = Arrays.asList(arr); Arrays.asList() 实际上返回一个ArrayList,但是这个ArrayList是Arrays的一个内部私有类,而不是java.util.ArrayList类.这个私有类java.util.Arrays.ArrayList有set(), get(), c

(转) Java程序员应该知道的10个调试技巧

原地址:http://www.csdn.net/article/2012-09-03/2809495-java-debugging-tips-with-eclipse 调试可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运行时上面. 在开始之前,推荐大家去看看Eclipse shortcuts这篇文章,它将会给你带来很多方便.在本文中使用的是Ecli

Java程序员要求具备的10项技能

1.语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正. 2.命令:必须熟悉JDK带的一些常用命令及其常用选项,命令至少需要熟悉:appletviewer.HtmlConverter.jar. java.javac.javadoc.javap.javaw.native2ascii.serialver,如果这些命令你没有全部使用过,那么你对java实际上还很不了解. 3.工具:必须至少熟练使用一种IDE的开发工具,例如Eclips

Java程序员应该知道的10个调试技巧

转自:http://www.csdn.net/article/2012-09-03/2809495-Java-Debugging-Tips-with-Eclipse 木有收藏按钮,就直接转过来了.仔细阅读,很有帮助哈…… 摘要:调试不仅可以查找到应用程序缺陷所在,还可以解决缺陷.对于Java程序员来说,他们不仅要学会如何在Eclipse里面开发像样的程序,更需要学会如何调试程序.本文介绍了Java程序员必知的10个调试技巧,保证让你受益匪浅! [CSDN.NET 张红月/编译] 调试可以帮助识别

Java程序员应该掌握的10项技能

这篇文章主要介绍了作为Java程序员应该掌握的10项技能,包括java的知识点与相关的技能,对于java的学习有不错的参考借鉴价值,需要的朋友可以参考下 1.语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正. 2.命令:必须熟悉JDK带的一些常用命令及其常用选项,命令至少需要熟悉:appletviewer.HtmlConverter.jar. java.javac.javadoc.javap.javaw.native2asci

Java程序员应该知道的10个Eclipse调试技巧

Eclipse是众多Java程序员实用的开发工具,其中开发技巧也是繁多,但作为优秀的Java程序员,需要掌握最起码的调试技巧. 小编从前辈程序员和网络中,整理了10个Eclipse调试技巧,希望对Java程序员有用. 1 条件断点 如果你不知道如何添加断点,只需点击左边面板(行号前面)断点即被创建.在调试界面中,“断点”视图会把所有被创建的断点列出来.我们可以给它加一个布尔条件,也就是说,该断点会被激活并且如果布尔条件为真,就会执行该断点,否则将会跳过往下执行. 2 异常断点 在断点视图中,有一

一个Java程序员应该掌握的10项技能

1.语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正. 2.命令:必须熟悉JDK带的一些常用命令及其常用选项,命令至少需要熟悉:appletviewer.HtmlConverter.jar.java.javac.javadoc.javap.javaw.native2ascii.serialver,如果这些命令你没有全部使用过,那么你对java实际上还很不了解. 3.工具:必须至少熟练使用一种IDE的开发工具,例如Eclipse

Java程序员应该了解的10个面向对象设计原则

面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator.Observer这样的设计模式,而不重视面向对象的分析和设计.甚至还有经验丰富的Java程序员没有听说过OOPS和SOLID设计原则,他们根本不知道设计原则的好处,也不知道如何依照这些原则来进行编程. 众所周知,Java编程最基本的原则就是要追求高内聚和低耦合的解决方案和代码模块设计.查看Ap

高级Java程序员值得拥有的10本书

Java是时下最流行的编程语言之一.市面上也出现了适合初学者的大量书籍.但是对于那些在Java编程上淫浸多时的开发人员而言,这些书的内 容未免显得过于简单和冗余了.那些适合初学者的书籍看着真想打瞌睡,有木有.想找高级点的Java书籍吧,又不知道哪些适合自己. 别急,雪中送炭的来了:下面我将分享的书单绝对值得拥有.ps,我也尽力避免列出为特定软件或框架或认证的Java书,因为我觉得那不是纯Java书. 1.<Java in a Nutshell>(Java技术手册) 与其说是必读书籍,还不说是参