Previous to Java the language of choice was C++, and before that, C.
Java has eclipsed C++ in a lot of ways, but for all out performance, C/C++ is the ideal.
The compile time type checking in C++ is very similar to C, but has some legacy language features that are easily abused and polymorphism with virtual methods or managing memory in a large application can add a lot of complexity.
C/C++ is still an ideal solution for systems programming or embedded development where performance is mandatory.