Java Tutorial, May 14, 1996 Java Tutorial May 1996 Module on Java Language and Applets Instructor: Geoffrey Fox teamed with Wojtek Furmanski, Nancy McCracken Syracuse University 111 College Place Syracuse New York 13244-4100 Abstract of Java Tutorial Overview including History and alpha versus beta issues Comparison of Java and Javascript Overall Java Philosophy and Features including security etc. Java Programming Language Object Oriented and Class Structure Exceptions Applet Programming and Threads Abstract Windowing Toolkit Networking and I/O; native classes Futures and HPCC Implications Hot Java is not discussed as beta version not currently available Overview and History of Java Development Overview -- What Is Java/HotJava? HotJava is a Web browser that supports dynamically downloadable interactive content. Alpha version of HotJava expected to be replaced by major rewrite Arbitrarily sophisticated dynamic multimedia applications inserts called Applets can be embedded in the regular HTML pages and activated on each exposure of a given page. Applet constructs are implemented in terms of a special HTML tag: where the URL and class file name points to a chunk of server side software that is to be downloaded and executed at the client side on each presentation of a page containing this applet which executes in window specified in size by width and height in picxels. Applets are written in Java -- a new general purpose object-oriented programming language from Sun Microsystems. History of Java Language and Team Starts in 1991 by Project Green --- a group in Sun that detaches from the main campus as a semi-autonomous task force focused on operating software for consumer electronic devices such as smart set-top boxes Gosling (creator of Sun NeWS which had major conceptual impact both on current Java and Telescript models) realizes that C++ is not adequate and initiates development of a new language Oak, later renamed as Java. A PDA (Personal Digital Assistant -- codename *7) based on Oak/Java ready in 1993. Green Team incorporates as FirstPerson, Inc. *7 proposal to Time-Warner rejected in 1993. 3DO deal falls through in 1994. FirstPerson, Inc. dissolves. Small group (~30 people, now Java Team) continues development and decides to adapt Oak as a Web technology. History of Java Language and Team (contd) An experimental web browser written in Java, called WebRunner and later renamed as HotJava, ready in 1994. Java/HotJava published in April '95. Netscape licences Java in May '95 and builds Java into Netscape 2.0 -- This confuses ownership and open-ness of Java Beta JDK (Java Development Kit) published in summer/fall '95. It is better software but lower functionality than Alpha. First alpha Java books appear in fall '95 such as a popular overview by SAMS and technical book "Java!" by Tim Ritchey, edited by New Riders. Dec 4 1995 Business Week cover story on "Software Revolution --- The Web Changes Everything" exposes Java as a breakthrough force in the expanding Web/Internet. Also points out that "Java as a business" is yet to be defined. In next week, SGI IBM Adobe Macromedia and finally Microsoft adopt/license Java. It appears that Java will be open and should be adopted by open Web community Java/HotJava Alpha vs JDK Beta Situation -- Alpha Alpha release of Java/Hotjava included: C source code for the Java interpreter (Virtual Machine) Java foundation classes (base language support, I/O, networking, Internet protocols, windowing, graphics, utilities) HotJava browser package used to build HotJava in Java. Includes 'hotjava' class which 'is' HotJava application. In Short, Alpha Java/HotJava was a complete software release of all system components, free for research and subject to ($125K) licence for business use. Java/HotJava Alpha vs JDK Beta Situation -- Beta/1.0 Version 1.0 of JDK released January 96 by JavaSoft Beta/1.0 JDK should be the Internet standard and so compatible with ongoing Java implementations by all licensees, most notably Netscape. Beta/1.0 JDK includes: Java Compiler (.java to .class) for Sun Solaris and Windows NT/95 avaliable as .class itself (Javac written in Java) but no source Java source for the foundation classes (modified and incompatible with alpha) appletviewer to run/preview applets tools for converting alpha applets to beta applets. Source code for the interpreter There is also no browser package and no beta HotJava yet --- current users are given an option to use Netscape2 or just preview beta applets using appletviewer and wait for beta/1.0 HotJava (with unknown release date). Java/HotJava Alpha vs JDK Beta Situation -- HotJava Release of Beta/1.0 HotJava expected soon and could be very interesting technically for certainly alpha HotJava was very helpful in building customized Graphical User Interfaces Also raises questions about Netscape's business model and Netscape specific HTML extensions. HotJava allows others who do not like Netscape's GUI or HTML extensions to challenge with a base system (modular browser) that has better architecture than current Netscape Substantial tutorial and report material available on line http://www.javasoft.com Java Beta Books -- I Hooked on Java, by Java developers Arthur van Hoff, Sami Shaio, Orca Starbuck, Addison-Wesley, is the (first) serious (but still rather high-level) book on beta Java. It contains example applets, but not much on programming. Teach Yourself Java in 21 Days, by Laura Lemay and Charles L. Perkins, Sams.net Publishing, is a "how-to" book at the intermediate programming level. It concentrates on applets and windowing more than the object-oriented part of the language. Java in a Nutshell, by David Flanagan, is the language reference book in the familiar O'Reilly series. Java Beta Books -- II The Java Programming Language, by Ken Arnold and James Gosling, Addison-Wesley, May 1996, has lots of details on the language basics for intermediate and advanced programmers. It covers threads and i/o packages, but not applets or windowing packages. Java Primer Plus, supercharging Web applications with the Java programming language, by Paul M. Tyma, Gabriel Torok, and Troy Downing, Sams.net, doesn't assume a lot of programming background, has chatty explanations and still covers lots of programming detail. Java Beta Books -- III There are four books in the Java Series from SunSoft Press, Prentice-Hall. instant Java*, by John A. Pew, contains multimedia and animation applets for HTML authors. This is not a programming book. Java by example, by Jerry R. Jackson and Alan L. McClellan, covers all key features with examples, but not as much detail about the language. just Java, by Peter van der Linden, for intermediate programmers, gives good explanations of key features without going into every detail. core Java, by Gary Cornell and Cay S. Horstmann, offers detailed coverage of the language and packages for advanced programmers. * this title is great, but what happened to "express Java", "Percolating through Java", and "Java for Drips"? Java vs. JavaScript Comparison of Java and JavaScript -- I Netscape renames Livescript as Javascript and this is an interesting variant of Java which is fully interpreted -- use for overall customization of client Use Java for detailed programming and JavaScript for overall integration of client interface and system JavaScript: Interpreted by client and NOT compiled Java: Compiled on Server before execution on client Note both are reasonably "pure" C/C++ like languages and do NOT have useful sh/awk text and system enhancements of Perl(5) JavaScript: Object based -- no classes or inheritance -- built in extensible objects Java: Object-oriented. Programs consist of object classes with inheritance Comparison of Java and JavaScript -- II JavaScript: Integrated with HTML as embedded ascii but of course HTML looks rather irrelevant at times! Java: Applets distinct from HTML but invoked from HTML Pages JavaScript: do not declare variables' datatypes -- Loose typing Java: MUST declare variables' datatypes -- Strong typing JavaScript -- Dynamic Binding -- object references computed at runtime Java -- Static Binding -- object references must exist at compile time Java and JavaScript are secure and cannot write to disk Overall Java Philosophy and Features Some Key Java Features Document The Java: A White Paper by Sun Microsystems -- October 1995 draft by James Gosling and Henry McGilton -- enumerates the following main features of Java: Simple and Familiar Object-oriented Architecture-neutral Portable Somewhat Interpreted Distributed Robust Secure High performance Multi Threaded Dynamic Java Features -- It's Simple and Familiar! Java omits several rarely used, poorly understood and confusing features of C++ including operator overloading, multiple inheritance, pointers and automatic type coercions. It adds automatic garbage collection which makes dynamic programming easier in Java than in C or C++. No more mallocs! It also adds 'Interface' construct, similar to Objective C concept, which often compensates for the lack of multiple inheritance by allowing method calling syntax to be "inherited". The resulting language is familiar as it looks like C++ but is simpler and hence easier to program in. It also results in a much smaller kernel which is suitable for planned Java ports to consumer electronic devices. Base (alpha) interpreter is ~40Kb, libraries and threads add additional 175Kb. Java Features -- It's Object-oriented Java model can be viewed as a C++ subset, with some dynamic elements inherited from Objective-C (method overloading, garbage collection). Structures, Unions and Functions are absorbed into data and methods of Java classes -- Java is Simple! The strength of Java object-oriented model is not is sophistication but in simplicity and the extensive class library associated with the system (some 250 public classes were released in both alpha and beta). Java class plays also a role of a communication atom in the Web embedding model. Applet classes identify themselves by names in the HTML applet tag. Applet downloads other classes, present in the applet source. Hence, the Java class names play the role of addressing mode for the distributed Java code database. Java Features -- It's Architecture-Neutral C/C++ programming in a heterogeneous network environment requires use and compatibility across several vendor platforms and the corresponding compilers. This problem is solved in Java by designing platform-independent binary representation called Java bytecode (or opcode). Java compiler (written in Java and platform-independent) reads Java source and generates Java bytecode. These bytecodes are shipped to client machines upon browser requests. Each client machine must run Java interpreter which performs runtime execution of Java bytecodes. Java interpreter is written in POSIX compliant ANSI C and needs to be ported to and conventionally compiled (once) on each individual platform. Once the interpreter is ported, application developers don't need to worry at all about platform specificity and differences between native compilers. They write portable Java which is compiled by platform independent Java compiler and executed on Java interpreter, ported to various platforms. Java Features -- It's Portable Java language offers a uniform abstract (virtual) machine model which is identical for all platforms. SUN owns the Java Virtual Machine (see online report) -- it is universal while classes can be added by any user Unlike in C/C++ where various integers match the architecture of a physical machine at hand, Java byte, char short, int and long are always of the same size, equal to 8, 16, 16(unicode), 32 and 64 bits, respectively. No header files, preprocessors,#define etc. floating point is always IEEE 754 Differences between vendor specific windowing environments (X Windows, MS Windows, Macintosh) are removed in terms of the Abstract Windowing Toolkit (AWT) metaphor. AWT is given by ~60 Java classes (alpha) which offer a universal GUI programming model, portable between UNIX, PC and Mac, and translated automatically to native windowing systems on individual platforms by Java interpreters. Java Features -- It's Somewhat Interpreted Java represents a compromise between fully compiled (like C/C++) and fully interpreted (like Smalltalk or Perl) models. Java "compiler" produces a binary bytecode output which is portable and much smaller than the real binary for a specific machine (Typical bytecode size is of order of the original source code, within a factor of 2). Java "interpreter" executes this bytecode and is therefore less dynamic than e.g. Perl interpreter (which performs an equivalent bytecode construction internally and on-the-fly when reading the program source). In general, the compilation process is: a) time consuming and b) platform specific. Hence, interpreters are built and used to facilitate a) rapid prototyping and/or b) portability. Java model is focused on platform independence but the development throughput is also reasonable since the Java compiler is fast and generates compact bytecode output. Java Features -- It's Distributed Popular TCP/IP based protocols such as FTP or HTTP are supported in terms of network protocol classes. This facilitates various forms of distributed processing. New protocols (e.g. PVM etc.) can added and dynamically installed. Distributed computing model of Java is mainly client-server, with Java compiler preparing the opcodes at the server side, and Java interpreter executing it at the client side. One can expect more dynamic uses of Java with Java threads on both Server and Client side communicating with each other. This is illustrated by Java based Collaboratory developed by Vishal Mehra as NPAC/Ece Master's Thesis Java Features -- It's Robust Java enforces compiler-time type checking and eliminates this way some error prone constructs of C/C++. Pointer arithmetic is fully eliminated which allows e.g. for runtime checking of array subscripts and enforces security of the Java model. Explicit declarations are always required, i.e. C-style implicit declarations are abandoned. This allows the Java complier to perform early error detection. Rapid prototyping in Java is less natural than in JavaScript,Lisp, Tcl, Smalltalk or Perl, but the software quality assurance of Java is higher than in these more dynamic and 'forgiving' languages. Java Features -- It's (Hopefully) Secure Java binaries are shipped across the network and executed on client machines. Security is therefore a critical issue and strongly enforced in Java. Java contains its own networking classes which are designed to be secure Modifications of the C++ model such as eliminating pointer arithmetic and coercion were dictated mainly by the security requirements. Most viruses are based on acquiring access to private/protected sectors of computer memory which is impossible in Java. Java opcodes are executed at the client side by Java interpreter which operates exclusively on the virtual memory. Hence, unless there are security bugs in the Java interpreter itself, the model is safe and users cannot create security holes by incorrectly or maliciously written applets. The byte codes sent across network are verified at the client which prevents evil/corrupted classes from causing problems Java Features -- High Performance Java interpreter performs on-the-fly runtime execution of the Java bytecodes which results typically in a satisfactory performance. Support for generating native machine code out of Java bytecodes, viewed as intermediate compiler form, is also provided and useful for performance demanding applications. The performance of the machine code, generated from Java bytecodes, is comparable to that offered by typical C/C++ compilers on the same platform. Several of these concepts are in fact similar as in the OSF/ANDF project. Using ANDF terminology, we would call Java compiler a 'producer', and the machine code generator discussed here, an 'installer'. Default Java working mode doesn't use installers but directly interprets the intermediate form (this mode is supported in ANDF by GAI -- Generalized ANDF Interpreter). ANDF model is in principle applicable to all languages. Java/HotJava system implements ANDF concepts for the Java language. Java Features -- It's Multithreaded Java model offers preemptive multithreading, implemented in terms of the Thread class. Thread methods offer a set of synchronization primitives based on monitor and conditional variable paradigm by C.A.R. Hoare. Java threads inherit some features from the pioneering Cedar/Mesa System by Xerox Park that gave birth to Macintosh and object-oriented programming. A typical use of Java multithreading in applet programming is to have several independent but related simulations (e.g. various sorting algorithms), running concurrently in an applet window. Multithreading is also used internally by the HotJava browser to handle multiple document dynamics. Another interesting application domain are multi-HotJava environments to come such as collaboratory or gaming. Java threads don't have built-in point-to-point communication primitives. Various thread communication environments can be provided by coupling the thread and network protocol objects. Java Features -- It's Dynamic Java model is more dynamic than C++ and closer to Smalltalk or Perl. Subclasses don't need to to be recompiled after superclass implementation is updated. Classes have runtime representation (implemented in terms of the Class class) which allows one to look up type of a given object instance at runtime (in C cannot know if pointer is to integer or browser!) C++ has "fragile superclass" problem where must recompile children if change anything (method/instance variable) in a superclass or referenced class -- Java resolves references at runtime and avoids this. Sun's Comparison of Language Features l Good l Fair l Poor