The best way to learn java (and actually, any programming language) is to try stuff out. Get a block of code and try to run it "by hand" (pretend you're the computer, and go through the code line-by-line). Then experiment with the code to see how changing different parts of it will effect the final result. I wouldn't recommend this with all code blocks, though especially some longer loops. If you get to any bits you don't understand how they work, ask someone who does or post your question here.
FYI, it took me a maybe a year or two to fully grasp the basic programming topics (note that this was done in C/C++, which have a slightly more cryptic syntax and is less forgiving). After grasping these basic ideas, I was able to pick up basic Java in maybe a few weeks and the more advance topics in a few months. I'm by no means an expert in all the components of Java, though (particularly networking and large portions of the GUI programming API). However, it's not really necessary to know all of these things because Java is well documented, so once you get the basics down you should be able to learn the stuff in the API as you need them.