If you don't write any constructor, Java provides a default no-argument constructor behind the scenes. It takes no parameters and sets all fields to their defaults: 0 for numbers, false for booleans, null for objects.
That is why new Car() works even when you haven't written a constructor. Java generates one for you.
But here is the catch. The moment you write any constructor (even one with parameters), Java stops providing the default. If you then try new Car() without a matching no-arg constructor, the compiler throws an error. When you need both, you must write the no-arg constructor yourself.