The main difference between the three is the characteristics of the application you will engineer using the technology.
J2EE is, as the name suggests, targeted at large, distributed, enterprise-wide system architecutres. It assumes your application spans across (at least) a LAN, a WAN, talks to disparate database systems, supports several types of clients( web, PDA, hand-held ), and perhaps talks to legacy applications. J2EE provides features and facilities in terms of APIs that enable developing such sprawling systems. J2EE components such as EJB, JMS, JNDI, Java Connector architecture, RMI,
Servlets,
JSP etc. while serving an unique purpose in the grand schem of things, come together in a magical way and work seamlessly to provide a single unified platform.
J2ME is at the other extreme of the system-size scale. The targeted host platform here is are small electronic devices. Now we are talking about a small, confined and restricted host environments where resource is extremely expensive. J2ME provides small footprint APIs to develop software systems for small devices.
J2SE is the plain vanilla Java. This comprises of common ( often called "core") APIs that can be used either in J2ME or J2EE systems. J2SE transcends dissimilar applications and provide the least common denominator set of language features and class libraries.
Hope my explanation helps clear your doubts.