One can use either approach, neither is mandatory. If an instance variable must have a specific value dictated by the state of the caller when the instance is created, passing that value to the constructor makes perfect sense. Otherwise, instance variables can be left to default values or initialized to specific values other than defaults in the no-argument constructor. Any mix of these possible approaches is acceptable.
Instance variables are initialized by default according to specific rules that you can find online. Local variables are not initialized by default and must be initialized by the program.