The problem is that the keyword void has slipped in, as a result of which we don't have a constructor at all, but a method which happens to have the same name as the class! This is legal, although obviously not a good idea. The call to new Oops() therefore calls the default constructor again and we know the rest.
If void is omitted, this version works:
public Oops() { this.theWidget = new Widget(42); } ... Oops myInstance = new Oops(); ...