The thing is that "Java" is really two different entities: the language
itself, and the massive class library that typically comes with it (some of
which is necessary because it implements classes defined in the language like
String). The Java compiler outputs bytecode which is run on the Java Virtual
Machine (JVM). Dalvik is essentially a replacement for the JVM. It uses
different bytecode, hence why you use a tool to translate Java bytecode files
into Dalvik ones to run. Then you have the library, much of which is written in
Java itself. Android includes a replacement for the Java library which follows
(for the groups of classes it includes) the Java library API exactly. That
replacement library's been compiled to Dalvik bytecode and is included in the
system just like the Java library would be, so programs have automatic access to
it. Were it not for classes like Object and String, you could have Java/Dalvik
programs without having the library at all (just as you can have C programs
without the C Standard Library).
Oracle tries to conflate the two,
talking about the language and virtual machine as if they were the class library
and vice versa. The two are related and tend to go together, but they're not the
same entity even though they usually have the same name. [ Reply to This | Parent | # ]
|