6.混淆值传递和引用传递。
    这是一个不太容易发现的错误。因为,当你看代码的时候,你会十分确定这是一个引用传递,而它实际上却是一个值传递。Java这两者都会使用,所以你要理解你什么时候需要值传递,什么时候需要引用传递。当你要传递一个简单的数据类型到一个函数中,比如,char、int、float或者double,你是在传递一个值。这个意味着这种数据类型的被复制了一个拷贝,是这个拷贝被传递到了函数中。如果这个函数去修改这个值,仅仅是这个值的拷贝被修改了。这个函数结束以后,将会返回到控制调用函数去,这时候那个“真正的”值没有受到影响,没有任何改变被存储。
    如果你想修改一个简单的数据类型,可以将这个数据类型定位一个返回值或者将它封装到一个对象中。
    当你要传递一个java对象到一个函数中,比如,数组、向量或者是一个字符串,此时你传递的就是一个对象的引用。这里的字符串也是一个对象,而不是一个简单数据类型。这就意味这你要传递一个对象到一个函数,你就要传递这个对象的引用,而不能去复制它。任何对这个对象的成员变量的改变都会持久化,这种改变的好坏要取决于你是否是刻意而为之。
    有一点要注意,如果字符串没有包含任何方法改变它的值的时候,你最好将它作为值来传递。
    5.写一个空的异常处理。
    我知道一个空的异常处理就像忽略错误一样很诱人。但是如果真的发生了错误,你不会得到一个错误信息的输出,它使得不太可能发现错误的原因。甚至是最简单的异常处理都是很有用处的。举个例子,在你的代码加上try{}catch{},去试着捕捉任何的异常抛出,并打印出错误信息。你不用为每个异常都写出定制的处理(虽然这是一个很好的编程习惯)。但是不要将这个异常处理空着,否则你就不会知道有什么错误发生了。
    举例:
    public static void main(String args[])
    {
    try {
    // Your code goes here
    }
    catch (Exception e)
    {
    System.out.println ("Err - " + e );
    }
    }
    4.忘记java中索引是从0开始的。
    如果你有C/C++的编程背景的话,你在使用其他编程语言的时候就不会发现同样的问题了。
    在java中数组的索引是从0开始的,这就是说第一个元素的索引必须是0.困惑了?让我们看看例子吧。
    // Create an array of three strings
    String[] strArray = new String[3];
    // First element's index is actually 0
    strArray[0] = "First string";
    // Second element's index is actually 1
    strArray[1] = "Second string";
    // Final element's index is actually 2
    strArray[2] = "Third and final string";
    在这个例子中,我们定义了一个有着三个字符串的数组,当我们访问它的元素时候减去了一个。现在,当我们试着去访问strArray[3],也就是第四个元素的时候,就会有一个ArrayOutOfBoundsException异常被抛出。这个就是最明显的例子-忘记了0索引规则。
    在其他地方0索引规则也能使你陷入麻烦。例如字符串中。假设你要从一个字符串确定的偏移位置处得到一个字符,使用String.charAt(int)函数,你就能看到这个信息。但是在java中,字符串类的索引也是从0开始的,这就是说第一个字符的偏移位置为0,第二个为1.你可能会陷入一些麻烦,如果你不注意这个问题的话,特别是你的应用程序中使用了大量的字符串处理程序,那样的话你就很可能使用错误的字符,同时在运行是抛出一个StringIndexOutOfBoundsException异常,就像ArrayOutOfBoundsException异常一样。下面的例子证明了这些:
    public class StrDemo
    {
    public static void main (String args[])
    {
    String abc = "abc";
    System.out.println ("Char at offset 0 : " + abc.charAt(0) );
    System.out.println ("Char at offset 1 : " + abc.charAt(1) );
    System.out.println ("Char at offset 2 : " + abc.charAt(2) );
    // This line should throw a StringIndexOutOfBoundsException
    System.out.println ("Char at offset 3 : " + abc.charAt(3) );
    }
    }