I really need some guidance on this, first of all, I have intermediate knowledge in programming, specifically Java. I have an idea of creating a tool for cars just like the diagnostic testers that we see mechanics use when they need to diagnose cars' issues. I want to create a tool for cars (Not exactly the same as the testers), but I do not know what I need to learn, I know I need to learn C, but what else do I need though?, I don't mind one or two years of self-teach since I am a self-taught programmer. Thanks
You will be fine with C. The language which you use might, to some degree, be influenced by the hardware which you use to interface to the CanBus.
Read up on CanBus. Look at OpenCan. And (eventually) - spend some money and buy some hardware to interface you with your vehicle. Google until you find what suits you, but, for instance, this is cheap and a good start-point.