I believe that in order to learn a language you need to refer to many books and discover all different styles and approaches. This especially applies in JAVA because of its size and depth. Inside the academic environment I had the opportunity to do so. If someone needs to buy one book in order to learn JAVA (fundamentals and advanced issues), this is definately the one. JAVA seems like a labyrinth especially for a beginner and this is the solution. Well written, updated (not all books are, although this sounds strange), most importantly covering all subjects from the right perspective, clarifying almost all readers possible questions or confusions of this huge subject. By far the best book I have read.