If you call "new MyCanvas() " in MyCanvas' constructor, then while that MyCanvas object is being constructed, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again; and in that constructor, it will call "new MyCanvas()" again ...
and eventually either the universe explodes, or you get a StackOverflowError, whichever comes first