It takes ten thousand hours of practice to master any trade. This is true if you're trying to be a hockey player, a musician, or a programmer.
So, if you're trying to master programming, you need to do it. Don't memorize concepts; of course you'll forget them. Modern systems like Java have vast and mostly shallow conceptual spaces. (Somebody else said that studying programming is not the same thing as studying a programming language. That's because only a few of the concepts in any given language are deep enough to be worth memorizing.)
Another way of saying this, more bluntly: Who cares what methods are available in the Java String class? Only somebody who needs to actually handle strings. Why memorize such foolish trivia, especially when Eclipse will remind you? But, the idea that you can compare strings to each other in a way that lets you sort them into alphabetical order is exceedingly important.
Apply the concepts, then reflect on them. Write programs: programs that actually work. Write yourself some games. Write yourself some programs to solve Sudoku puzzles if you like. If you have an employer, write programs to solve their problems. Then, write a note or two in a personal logbook about what you learned at the end of each day. Keep doing that. And before you are aware of it, you'll master a fine craft.