but you can run a compiled 'c' program by simply typing it's name.
Yes, that is because the C compiler and linker generate binary files, with a very specific layout, containing machine code. Such binary files contain a hex marker (0x7F454C46) in the first several bytes that identifies the file as a "binary executable" and Linux knows how to load and run such a file.
You could always modify the app loader of the Linux kernel (or whatever code handles this in Linux) to recognize the binary marker for a class file (0xCAFEBABE) as a Java file and have it launch the file with Java. Of course you would have to deal with the classpath somehow.
Doing the same for JARs would be trickier because they use the same binary marker as ZIP files (0x504B) but not all ZIP files are "runnable".