Default (no parameters) constructor is created by the compiler if no constructors are specified. The compiler does that when and only when NO constructors exist. If you create ANY constructor in your class this compiler behaviour will no longer apply. (Try creating a constructor with at least one parameter to see what will happen)
Deserialization will involve two steps - create empty object using default (no parameters) constructor and than set all values. If you class does NOT have default (no parameters) constructor - either created by yourself explicitly or by the compiler - deserialization will fail.
Deserialization never uses parametrised constructors as it is impossible for it to guess the correct constructor to use. Example: deserialization can not distinguish between Constructor(String parameter1)
and Constructor(String parameter2)