Swing applications (and all other non-applets) are called by the JVM directly. It loads the class specified on the command line (e.g. "java test.Main" loads class "test.Main"), finds its "public static void main(String)" method and calls that.
Applets are called indirectly by the browser (or applet viewer). The browser reads the HTML file in which the applet is placed, finds its class name and instantiates it. It then calls the init() method to finish the loading. It then calls start() every time the applet is shown again (by loading the HTML page), and stop() when the applet is no longer visible (by loading a different HTML page).
The init() method should contain code that is necessary for the applet to run. Usually this is loading parameters etc. I'm not sure if GUI creation should go in this method, or in the applet constructor. I doubt that matters. I think it's the code that reads external information from the HTML page (getAppletInfo, getCodeBase, getParameter etc) that cannot go in the constructor.
The start() and stop() methods are not used as much as the init() method. They could be used to start and stop a little movie, or an audio clip, or a thread, or something like that.