Coming back to the original post. (sorry).
I think it is a level of depth. For Java, yes you do GUI/ graphics from a previously written library. For the c++ you are seeing a deeper part of computer programming, i.e. the lower level, the bit that builds the library. If you do more embedded stuff, you would learn assembler.
Interestingly there is a shift between the [old?] self-taught programmers who did basic (until aged 10) - assembler - C - C++ - Java, and the CS programmers who did Java-C++-C-assembler in that order. The self-taught know that the CS people don't understand pointers/memory correctly and the CS people know that the self-taught spend way to long programming something that is a one line library call, [even if it isn't exactly what was wanted].
Your course, could have done it the other way around (C++ first then java), but java hides some of the pointer stuff from you.
It is important to code at the lowest level required and no lower.
For my work, we use absolutely no java, it is 85% c++/fortran, some Schema, some Octave, but then I do numerical stuff that burn a few 1000 days of CPU per run. The graphics are C++ but so much of the rest is, it was a natural extension.
Would we use java? just for the graphics (had we not had to build the numerical engine). Yes! Could we do the numerics in java, maybe but the extra hardware to run it would have been prohibitively expensive [it costs approximately 2000 dollars to power and cool a single computer core -- either quad/dual per year]. Factors 2 are big, and factors 10 are life changing.
p.s To Freaky_Chris: First off, I envisaged you as a maths major

Bit surprised actually. Second, the process of "arguing" with the lectures is part of the university process, by the time you are doing your PhD you will sit and have coffee each day with several profs. and "discuss" about this/that, because that is one of the fastest ways to learn.