Our best practice: don't use java when you don't NEED it. Logic in Mendix is easier to understand/build than in java-code, or at least: That's the whole reason that Mendix exists.
But in some cases you need to use it. Example: if you want to automatically pickup files from a certain location and do something with those files. There is no microflow activity to pick up files automatically without user interaction, so you need java or something else. Typical this kind of scenarios require java in your project, but we try to stay away from custom java-actions.
In major mendix migrations we experienced a lot of work to change java-actions due to mendix api changes.
I concur with Samet. Apart from that, in my opinion, another feature of modeler, where you can take an image of a microflow/model is really great :). Personally I love that feature.
Hence if you are using a too much of java actions then your actions will be prone to api conflicts and changes. Having said that, still there are some operations( may be a tiny one :) ) where i ll prefer java. Such an example will be fetching first item from the list( when you know that your list will only contain one item)..