"Bleeding at the Keyboard" is a very nice java ebook and a good java guide teaches you modern programming with java. This java ebook is written by Gregory Rawlins.
The following are the topics covered in this java book.
Setting the Stage: object, class, method, program, Java interpreter, inheritance, interface, design pattern.
Introducing the Players: class, variable, value, type, state, behavior, reference value, reference variable, message, statement, method, reference variable, reference value, class, method, and variable naming conventions, declaration statement, boolean variable, int variable, double variable, boolean value, int value, double value, true, false, scope, local variable, global variable,
Behind the Scenes: parameter, method execution, sending a message, type, return, new, assignment statement, operator, operand, main() method, dot operator, variable access, continuation line, comment, void, if, ".", "<=", "==", "/*", "*/", "//".
Character Study: type, value, reference value, reference variable, reference type, boolean type, int type, double type, Class type, null, state, behavior, operator, operand, remainder, expression, boolean expression, int expression, double expression, type casting, (int), (double), (boolean), "+", "-", "*", "/", "%", "&&", "", "!", "<", "<=", ">", ">=", "==", "!=".
Stage Direction: state, behavior, type, encapsulation, variable initialization, constructor, signature, constant naming convention, class variable, class method, if-else, this, import, private, public, final, static, main().
All Together Now: while, for, blocks, scope, increment operator, decrement operator, "++", "--", declaring variables in for loops, encapsulation, method overloading, method signature, String, string concatentation, operator overloading, arrays, array operator, "[]", packages, package access, package naming convention, package, the unnamed package.
It Takes All Types: subclass, superclass, extends, super(), overriding methods, overloading methods, class Object, the equals() method, the toString() method, String, protected, interface, interface naming convention, implements, abstract method, abstract class.
What's in a Name?: subtype, supertype, this, this(), super, super(), "([type name])", instanceof, reference casting, upcast, downcast.
Think Like an Object: encapsulation, final method, final class, private constructor.
Let the Games Begin: threads, Runnable, sleep(), exceptions, try, catch, Graphics, Component, paint().