When i learned java at school, the workbook was Bruce Eckel's "thinking in java", and i found it very enlightning, interesting, and even fun to read.
In not much time, i'll need to learn some advanced C++, so, I guess i'll be using Thinking in C++

[edit]edited because i understood everything wrong. thanks taichi! [/edit]