You should probably learn the language before you start programming games. I liked the Sam's Teach yourself Java in 24 Hours book. As for a good book on game programming, I've never really seen one. I just use the internet and look up tutorials for OpenGL, Collision Detection, AI, ect.
EDIT: GD.NET puts links for books on the side of the page. Most of these are fairly popular; Maybe look at some reviews.
I'm wondering why people don't use pointers instead of getter functions. It's needs much less code, less memory and doesn't require a function call. The reason people use getter functions(at least from my knowledge) is because they want to create variables that can be used in the rest of their code without letting it be written to. Can someone explain to me what I'm missing here?