I have taken interest in basic hardware interaction with software.
What's a good language to start learning to control hardware? Can Java do the job?
As others have suggested, C or C++ is the "Proper" way to start as interacting with hardware can be done very directly due to the pointer structure (You can access arbitrary memory adresses).
If you haven't used C or C++ before i would suggest that you tried an arduino board as it would give you the feel of the C syntax and at the same time give you a very well documented board to play around with.
You should even be able to interface to the board in Java and C#
http://playground.arduino.cc/Interfacing/Java http://playground.arduino.cc/Interfacing/csharp