We propose in this paper a definition of the semantics of Java programs which can be used as a basis for the standardization of the language and of its implementation on the Java Virtual Machine.
The definition provides a machine and system independent view of the language as it is seen by the Java programmer. It takes care to directly reflect the description in the Java language reference manual so that the basic design decisions can be checked by standardizers and implementers against a mathematical model. Our definition is the basis for a related definition we give in a sequel to this paper for the implementation of Java on the Java Virtual Machine as described in the language and in the Virtual Machine reference manuals.