How is Java different from other languages Less than you think Java is an imperative language like C Ada C Pascal Java is interpreted like LISP APL Java is garbage collected like LISP Eiffel Modula 3 Java can be compiled like LISP Java is object oriented like C Ada Eiffel A succesful hybrid for a specific application domain A reasonable general purpose language for non realtime applications Work in progress language evolving rapidly Original design goals white paper 1993 Simple Object oriented inheritance polymorphism Distributed Interpreted multithreaded Robust Secure Architecture neutral a language with threads objects exceptions and garbage collection can t really be simple Portability Critical concern write once run everywhere Consequences Portable interpreter definition through virtual machine the JVM run time representation has high level semantics supports dynamic loading high level representation can be queried at run time to provide reflection Dynamic features make it hard to fully compile safety requires numerous run time checks Contrast with conventional systems languages C C Ada Conventional languages are fully compiled run time structure is machine language minimal run time type information language provides low level tools for accessing storage safety requires fewer run time checks because compiler least for Ada and somewhat for C can verify correctness statically Languages require static binding run time image cannot be easily modified Different compilers may create portability problems Serious omissions No parameterized classes C templates Ada generics Can simulate generic programming with untyped style casting Object down into specific class Forces code duplication or run time conversions No operator overloading syntactic annoyance No enumerations using final constants is clumsy A new construct interfaces Allow otherwise unrelated classes to satisfy a given requirement Orthogonal to inheritance inheritance an A is a B has the attributes of a B and possibly others interface an A can do X and other unrelated actions better model for multiple inheritance More costly at run time minor consideration Interface Comparable public interface Comparable public int CompareTo Object x throws ClassCastException returns 1 if this x 0 if this x 1 if this x Implementation has to cast x to the proper class Any class that may appear in a container should implement Comparable Threads and their interface class Doodler extends Thread override the basic method of a thread public void run scribble something Doodler gary new Doodler gary start calls the run method The runnable interface allows any object to have dynamic behavior class Simple Gizmo class Active Gizmo extends Simple Gizmo implements Runnable public void run a thread can be constructed from anything that runs Thread thing1 new Thread new Active Gizmo Thread thing2 new Thread new Active Gizmo thing1 start thing2 start Interfaces and event driven programming A high level model of event handling graphic objects generate events mouse click menu selection window close an object can be designated as a handler a listener in Java terminology an event can be broadcast to several handlers several listeners can be attached to a source of events a handler must implement an interface actionPerformed keyPressed mouseExited Events and listeners class Calm Down extends Jframe private Jbutton help new Jbutton HELP indicate that the current frame handles button clicks help addActionListener this if the button is clicked the frame executes the following public void actionPerformed ActionEvent e if e getSource help System out println can t be that bad What s the problem Introspection reflection and typeless programming public void DoSomething Object thing what can be do with a generic object if thing instanceof gizmo we know the methods in class Gizmo Instanceof requires an accessible run time descriptor in the object Reflection is a general programming model that relies on runtime representations of aspects of the computation that are usually not available to the programmer More common in Smalltalk and LISP Reflection and metaprogramming Given an object at run time it is possible to obtain its class its fields data members as strings the classes of its fields the methods of its class as strings the types of the methods It is then possible to construct calls to these methods This is possible because the JVM provides a highlevel representation of a class with embedded strings that allow almost complete disassembly Reflection classes java lang Class Class getMethods returns array of method objects Class getConstructor Class parameterTypes returns the constructor with those parameters java lang reflect Array Array NewInstance Class componentType int length java lang reflect Field java lang reflect Method All of the above require the existence of run time objects that describe methods and classes Reflection and beans The beans technology requires run time examination of foreign objects in order to build dynamically a usable interface for them Class Introspector builds a method dictionary based on simple naming conventions public boolean isCoffeeBean public int getRoast public void setRoast int darkness is predicate get retrieval set assignment
View Full Document
Unlocking...