通常是从1开始的,下面的程序证明了这一点。
import java.util.Date;
import java.java.util.Calendar;
public class ZeroIndexedDate
{
public static void main (String args[])
{
// Get today's date
Date today = new Date();
// Print return value of getMonth
System.out.println ("Date.getMonth() returns ; " +
today.getMonth());
// Get today's date using a Calendar
Calendar rightNow = Calendar.getInstance();
// print return value of get ( Calendar.MONTH )
System.out.println ("Calendar.get (month) returns ; " +
rightNow.get (Calendar.MONTH));
}
}
8、防止线程在共享变量中并行存取
在写一个多线程的应用程序的时候,许多
程序员都喜欢抄近路。而这样会是他们的应用程序或者是小应
用程序发生线程冲突。当两个或者两个以上的线程访问同一个数据的时候,就存在一定的概率(概率大小取决于墨菲法则)使得两个线程同时的访问或者修改同一个数据。不要愚蠢的认为这样的情况不会发生在单线程的应用程序中。当访问同一个数据的时候,你的线程就很可能被挂起,而第二个线程进入时就会覆盖第一个线程修改的地方。
这样的问题不是仅仅出现在多线程应用程序或者是小应用程序中的。如果你写了java api 或者是java bean,你的代码就很可能不是线程安全的。即使你从来没有写过一个使用线程的单独的应用程序,人们也有可能使用你的程序。为了其他人,不仅仅是你,你就应该采取措施防止线程在共享变量中并行存取。
怎样来解决这个问题呢,最简单的就是让你的变量私有化。同时使用同步存取方法。存取方法允许访问似有的成员变量,但是仅仅是在一种控制方式中。下面的存取方法就能够以安全的方式修改计数器的值。
public class MyCounter
{
private int count = 0;//count starts at zero
public synchronized void setCount(int amount)
{
count = amount;
}
public synchronized int getCount()
{
return count;
}
}
9、大写错误
这是一个我们最经常犯的错误。他是很简单的,但是有时我们看着一个没有大写的变量或者方法却并不能发现这个错误。我自己也常常感到困惑,因为我认为这些方法和变量都是存在的,但是却发现不了他们没有大写。
这里你不能用银子弹来检查它,你只能自己训练者来减少这种错误。这里有个窍门:
Java api中所用的方法和变量名都应该以小写字母来开头。
所有的变量名和方法名的新词的开头都要用大写字母。
如果你以这样的形式来定义你的变量名和类名,你就是在有意识的使他们走向正确,你就能逐渐的减少这样的错误的数量。这可能需要一段时间,但是在以后有可能会避免更为严重的错误。
下来就是java程序员最常犯的错误了!!!
10、空指针
空指针是java程序员最经常犯的错误了。编译器不会为你检查出这个错误它仅仅在运行时在表现出来,如果你发现不了它,你的用户将很可能发现它。
当试着访问一个对象的时候,这个对象的引用就是空的,一个NullPointerException异常就会被抛出。空指针错误的原因是多种多样的,但是一般情况下发生这种错误意味着你没有对一个对象初始化,或者是你没有检查一个函数的返回值。
许多函数返回一个空是用来指示一个错误的条件被执行。如果你不尖擦返回值的话,你由于不可能知道发生了什么。既然原因是一个错误的条件,一般的测试就不会发现它,这就意味着你的用户可能
在最后的时候替你发现它。如果API函数指明一个空的对象很可能被返回,那在使用对象的引用之前一定要进行检查。
另外的原因可能是你在初始化对象的时候不规范,或者是它的初始化是有条件的。举例,检查下面的代码,看看你是否能发现这个错误。
public static void main(String args[])
{
// Accept up to 3 paramete