Why and when do you want to use one over the other?
The high level answer is you wouldn't - you wouldn't care. It's analogous to choosing an operating system based on which language it's written in.
If all you want to do is develop and run your own smart contracts, then the clients on which those contracts are run are abstracted away.
If you want to actually run your own client, rather than just develop Dapps, there might be reasons why some people would prefer one over the other:
- You want to run what the community would consider the safest, battle-tested client. So pick the most popular.
- You want to help the community by ensuring there are multiple different clients running in the network, so you deliberately don't run the most popular client. (During the DDoS attack at DevCon2, Geth was affected but Parity wasn't. If Parity hadn't existed, there would have been trouble.)
- You want to edit the source code to make your own alterations (e.g. if you're a miner, to change the mining algorithms), so pick a client written in a language you're most familiar with.
Note, though, that only in the last of these are you making a choice based on the underlying language of the client.
I will be using Solidity to write DApp on the top of EVM-Java and EVM-Python,
As I mentioned above, a) creating a Dapp, and b) running a client, are orthogonal. You don't need to run your own client/EVM to deploy your Dapp. The associated smart contracts will be run by every node in the network, so you can't choose what types of clients will run your contracts.