Note, however, that it's generally bad practice to let a reference to "this" escape from the constructor before that constructor has completed. It can be done, but you have to be careful with it. You should be okay here, since I assume this is a pretty simple program with no multithreading, but it's something to be aware of.
Still, if it were me, rather than having the coupon register itself upon creation, I'd probably have the creator register the coupon. Maybe even use a factory method as the only way to create coupons, so that we'd know they'd always be registered once they were created. Again, though, this may be beyond your current level or needs.
I suppose it's better to let my application-class add the coupon to the register when it creates a coupon then?
Yes, in general that would be the preferred approach, because 1) As a general rule of OO, a Coupon class should be responsible for what a Coupon is and does, not for keeping track of existing Coupons, and 2) In the Java language in particular, letting "this" escape from a constructor is dangerous and generally frowned upon.
It's a school project and Iam going to have a presentation where the teacher asks me why I have done it this way etc...
If you understand the above and can express them in your own words, you should have no problem with that.
subject: How to add an object to an array list in another class when the object is created?