How does compiling circular dependencies work?

I've made the example in Java but I think (not tested) that it works in other (all?) languages. You have 2 files. First, M.java: public class MType { XType x; MType() {x = null;} } Second,