You don't have to employ member initializer lists if you don't want to. Also, you can use a mix of default member initialization and member initializer lists. It's not just one or the other. The default member initializer will be used for any member that doesn't appear in a member initializer list.
Which one you choose depends on many things.
Default member initialization is useful when a member should be always initialized with the same value. It's a convenient shorthand that increases clarity as the initial value is shown at the place of declaration.
On the other hand, if you need to initialize a member with different values determined at runtime, you can't do that with a default initializer; you have to do it in the constructor instead.
As opposed to C++, where default member initialization is a relatively recent concept, Java has had the equivalent since its inception, and programmers have discussed the merits of the two different initialization mechanisms at length, e.g. see Default constructor vs. inline field initialization.