I personally like to declare everything in final and immulatable so that it give me feel it more safe (e.g.: variable won't be replace with other value unexpected; method won't be override unexpected). The following is some discussion, see if you interested. http://tundra-programming.blogspot.com/2005/06/how-often-do-you-use-final.html http://bordet.blogspot.com/2005/07/weird-particular-in-javautilconcurrent.html Here is a few update that against using final, mainly against using final class but not final method and variable: http://blogs.objectmentor.com/ArticleS.MichaelFeathers.ItsTimeToDeprecateFinal http://www.cincomsmalltalk.com/blog/blogView?showComments=true&entry=3325667363 http://www.artima.com/forums/flat.jsp?forum=106&thread=161019 And here is some support using final: http://www.churchillobjects.com/c/11027d.html Prevent security and memory leak in rare case: http://futuretask.blogspot.com/2006/05/java-tip-10-constructor-exceptions-are.html