The standard version of this title ("An Introduction to Object-Oriented Programming with Java") has been cited by several users as being hard to understand for programming n00bs, and I'm sad to report that things are no better for this "Comprehensive" edition. The flaws of this book run wide and run deep, and I'm guessing they'll be off-putting to most people without a preexisting foundation of technical knowledge.
The first problem that hits you is the author's crappy communication skills. Check out the very first paragraph of Chapter 1:
"The two most important concepts in object-oriented programming are the class and the object. In the broadest term, an object is a thing, both tangible and intangible, that we can imagine. A program written in object-oriented style will consist of interacting objects. For a program to keep track of student residents of a college dormitory, we may have many Student, Room, and Floor objects. For another program to keep track of customers and inventory in a bicycle shop, we may have Customer, Bicycle, and many other types of objects. An object is comprised of data and operations that manipulate these data. For example, a Student object may consist of data such as name, gender, birth date, home address, phone number, and age and operations for assigning and changing these data values."
You can probably figure out the basics of what he's trying to say here (since the underlying concept is easy), but do you see how this isn't the most clear and concise way of presenting information?
The next issue is how he jumps too quickly into new code. Chapter 2 starts by throwing out programs replete with terms like "JFrame" and "public static void," which at this point are still cryptic to us, then quickly moves along using the new terms casually, as if we're already fluent.
An even bigger problem is that he often never explains terms or concepts properly to begin with. Examples:
1. "In Java, classes are grouped into packages, and the Java system comes with numerous packages. We also can logically group our own classes into a package so they can be reused by other programs. To use a class from a package, we refer to the class by using the following format: . <class name>" Hold on dude, WHAT IS A PACKAGE?
2. "The syntax for method declaration is
<modifiers> <return type> <method name> ( ) { <method body> }
where <modifiers> is a sequence of terms designating different kinds of methods, <return type> is the type of data value returned by a method, <method name> is the name of a method, is a sequence of values passed to a method, and <method body> is a sequence of instructions." Gee, thanks for clearing that up.
3. And this is how he introduces strings (a common programming concept): "The textual values we passed to the print method or the constructor of the JFrame class are instances of the String class. A sequence of characters separated by double quotes is String constants. As String is a class, we can create an instance and give it a name." Notice he mentions a few characteristics of a string, and then moves onto an example of a string, but completely forgot to tell us what a string is.
Some transitions are abrupt, and once in a while he'll introduce a new concept halfheartedly, then quickly cut out and promise to explain it more fully later in the book. By the way, I've yanked all these examples from chapters 1 and 2 alone.
Trust me, I'm no simpleton; I have a knack for math and logic, I've finished college, and I have programmed before (in BASIC). This is just a massive failure of an introductory textbook: poorly written, confusingly explained, haphazardly organized, and a chore to read. Don't taint your first impression of Java. Buy a better book.