http://www.microdevnet.com/
http://java.sun.com
Essentially;
J2ME covers java for micro devices. Essentially you will be
programming using the MIDP ( and MIDP2 ) development profile, which
provides a specification for a range of behaviours, and CLDC (
connection limited device configuration ) which specifies the default
configuration. These are J2ME standard java "profiles" and
"configurations" that specifies the minimum functionality java
phones/devices will obey. Of course some have bells & whistles that
others don't. The way that manufacturers let developers write java
code to take advantage of these features ( vibrations, polyphonic
phone, direct draw animations, access to storage, communications,
Infra Red etc ) is to provide custom java API's that can be used. This
makes your implementation non-portable, but hey, if you're designing
for a phone with an audience of 50 Million people, do you really need
it to be portable. Jar sizes are also pretty small. Typically, all
your code and graphics have to fit into 64kb. Even though obfuscators
like dash-0 are good at compacting your code, you are going to have
severe problems if you generalize your code. Also MIDP does not
support advanced features such as transparent .png files. So I find
that programming MIDP rarely gives fast, flashy fully featured
products with tight code. Better to use custom API's and then re-write
/ port your application onto another phone. I know this violates Java
principles, but you have to be pragmatic with constraints like these.