I strongly, strongly recommend *against* learning C before C++. Learning C first will just teach you a bunch of wrong and limited way to think about programming, and then you'll take a lifetime to learn to get out of the ruts C forces you into and into better idioms, like type safety, OOP, and generic programming.
See this FAQ from the creator of C++:
http://www.stroustrup.com/bs_faq.html#prerequisite
As for Java -- among the other disadvantages that people have pointed out, including the important facts that Java is inefficient and Java programs suck, I think Java is worse to learn on becasue it has too much going on behind the scenes. One of the beauties of C++ is that the language does dang near nothing that you don't tell it to do. This really helps you learn about how programming and computers work, and it will help you appreciate, when you do move on to other languages, just what they are and aren't doing *for* you, and what that means in terms of efficiency, control, etc.
And also, speaking of control, Java gives you less of it. The Java philosophy is more or less that programmers are stupid and will make bad mistakes if we give them powerful tools. There's truth in that, but it's also restrictive and kills efficiency and (often) elegance.