One of the goals of Java is to enable the construction of software that can run stand-alone in small machines. Java applications can open and access objects across the net via URLs with the same ease as when accessing a local file system. Towards that end, a lot of emphasis has been placed on security. Rather, they are designed to be both easy to interpret on any machine and easily translated into native machine code on the fly. The bytecode can be translated on the fly into machine code for the particular CPU the application is running on.
Libraries can freely add new methods and instance variables without any effect on their clients.