670 likes | 788 Views
Peter Kriens provides an insightful overview of Java programming, detailing his extensive experience as a consultant and history within the Java community. From the inception of Java at SUN in the 1990s, through the evolution of JDK versions, to fundamental programming concepts and tools in Java, this guide serves as a thorough introduction. Discover essential topics like object-oriented programming, inheritance, interfaces, exceptions, and garbage collection, along with practical examples. Gain valuable insights from a seasoned expert to enhance your Java programming skills.
E N D
About me • Peter Kriens • Work as a consultant (mainly for for ERICSSON) • Finnasandsvagen 22 • 43933 Onsala, Sweden • +46 705950899 • Peter.Kriens@aQute.se
History • 1990 SUN starts crash team under Patrick Naughton • Carte blanche to clean up the software mess at SUN • Gosling created OAK for embedded devices (!) • Products all failed • 1993 Mosaic, the first web browser was born • Somebody realized the combination: Applets • Language became the product
History • 1996 JDK 1.0 released • Focused on Applets, lousy graphics • 8 packages, 4Mb download • 1997 JDK 1.1 released • Better graphics, reflection, security (try), beans, RMI, ZIP files • 22 Packages, 9 Mb download
History • 1999 JDK 1.2 SE released • Lightweight UI (!), collections, security (again), JAR files, Native interface change… • 59 packages, 20 Mb download • 2000 JDK 1.3 SE in beta • Improvements ... • 77 packages (so far), 25 Mb download
Quick Tour: Hello World • Getting started • Content of file: HelloWorld.java • /** * Small hello world example class. * */public class HelloWorld { public static void main( String args[] ) { System.out.println( "Hello world" + (args.length >= 1 ? args[0] : "whoever") ); }} • javac HelloWorld.java • java HelloWorld peterHello world peter • That is all ...
Quick Tour: Objects • Creating a class • Content of file: Point.java • /** * A Simple point class. */public class Point { double _x; // Instance variable double _y; public Point() { this(0,0); } public Point( double x, double y ) { _x=x; _y=y; } public double getX() { return _x; } public double getY() { return _y; } public double getLength() { return Math.sqrt( getX()*getX() + getY() * getY() ); } public Point translate( Point t ) { return new Point(getX() + t.getX(), getY() + t.getY() );}}
Quick Tour: Not to be an Object • Not all variables are objects like in Smalltalk • int, char, boolean, long, double, float, byte are <primitive> types. • Each primitive type is represented by a class in java.lang • public class HelloWorld { public static void main( String args[] ) { int length = args.length; Point p = new Point( length, length ); }}
Quick Tour: Inner class • Everything had to be a class. Callbacks require their own class • Too cumbersome to specify in other file, so special syntax was wrought (ugly!): • public static void main( String args[] ) { Point p = new Point() { public double getX() { return super.getX() * 2; } };
Quick Tour: Garbage Collection • Java cleans up after you • /* GC */...Point p = new Point();p = p.translate( new Point(10,10) );... • Previous code creates 3 new objects • No need for destructor. No need for delete
Quick Tour: Inheritance • Classes can be extended • /* Extending point class */public class Point3 extends Point { double _z; public Point3() { _z=0; super(0,0); } public double getZ() { return _z; } public double getLength() { return Math.sqrt( getX()*getX() + getY()*getY() + getZ() * getZ() ); } ...} • Only use it for an "is-a" relationship • Powerful but easy to overdo
Quick Tour: Inheritance • Single inheritance only • All classes inherit from class Object • A Class is a an instance of class Class • So the class Class is an instance of Class (!) • Class objects can be used as normal objects • Reflection • ClassLoaders • "super" keyword to access super class
Quick Tour: Interfaces • Used for specifications • /* Interfaces */public interface Compare { public int compare( Compare t );}class CPoint extends Point implements Compare { public int compare( Compare t ) { Point tt = (Point) t; return getLength() - t.getLength(); }} • Decouples using from implementation • Very popular with specifications
interface Quick Tour: Interfaces public interface Log { public void log(String s);} client uses Log public class SimpleLog { public void log(String s) { System.out.println( s ); }} implements Simple Log IBM Log Motorola Log
Quick Tour: Exceptions • Exceptions are used to separate normal flow of program from error cases • Runtime exceptions: • public class HelloWorld { public static void main( String args[] ) { System.out.println( "Hello world" + args[0] ); }}
Quick Tour: Exceptions • Checked exceptions: • public class HelloWorld { public static void main(String args[]) throws IOException { FileOutputStream out = new FileOutputStream( "temp" ); out.write( args[0].getBytes() ); out.close(); }} • Exceptions can be very messy
Quick Tour: Exceptions • Handling exceptions: • public class HelloWorld { public static void main( String args[] ) { FileOutputStream out; try { out = new FileOutputStream( "temp" ); out.write( args[0].getBytes() ); out.close(); } catch( IOException e ) { System.out.println( "Exception " + e ); e.printStackTrace(); } finally { try { out.close(); } catch(Exception ee) {} } }} • Never ignore exceptions: catch(...) {} • Easy to overdo exceptions
Quick Tour: Packages • Name spaces for Java • package = add a class to a package • import = use classes from a package • Encapsulate a number of related classes • Used for access control • Content of file: ../se/aQute/plane/Point.java • package se.aQute. plane;import se.aQute.basictest.*;public class Point { double _x; double _y; public Point() { clear(); } ...}
Quick Tour: Equality • Equal and identical are different concepts • Identity check is == • Class Object has method equals(Object o) method that is identity • 3 == 3; // YES • "three" == new String("three"); // NO • "three".equals( new String("three") ); // YES • Classes can override equals(Object o) for their semantics • Watch hashCode() when overriding equals() !!!
Quick Tour: toString() • toString() is a useful method for debugging • Each object inherits a default implementation from Object • Overriding can be very, very useful during debugging • public class Point { . . . public String toString() { return getX() + "," + getY(); } . . .}
The Java VM • Java is compiled to byte codes • Byte codes are interpreted by the VM File: HelloWorld.java public class HelloWorld { public static void main( String args[] ) { System.out.println( "Hello world" ); } } File: HelloWorld.class javac compiler 0xCA 0xFE 0xBA 0xBE 0x01 0xF7 0x76 0x41 0x23 . . . rt.jar or classes.zip java VM Hello world
Native code interface • Native code interface through JNI • Native interface defined in Java class • class Native { int var; public native int foo();} • Translated via javah into C header file • #include <native.h>typedef struct ClassNative { long var; } ClassNative;HandleTo(Native);extern long Native_foo(struct HNative *);
The Java VM: The good news • Portable format allows execution on many different computer types • Hundreds of VMs available from different vendors • Optimized for certain applications • Inherently safe
The Java VM: The bad news • Interpretation requires CPU cycles • Instruction set not optimized for target machines • Byte format is rather verbose
Is Java Cool? • Nothing particularly innovative • Portable object code from Pascal (P-code!) • Syntax from C++ • Object model from Smalltalk • Garbage Collection from Lisp • Reasons for success: • People were getting fed up with C++ • Java looked much simpler • Applets kick started it (but no longer drive it)
The runtime library • The runtime library is Java's best asset • Single implementation of common code • Some implementations are pretty bad (AWT!) • Library has grown very hard • From 8 packages to 77 packages! • Need for profiles • There is an amazing amount of code to be found on the net
The runtime library: java.lang • Basic package which is always included • Contains primitive type classes for Boolean, Integer, Double, Float, Byte, Character, Void • number <-> string conversions • number <-> number conversions • Max/Min values • Used in reflection
The runtime library: java.lang • Process, Runtime and System for access to system resources • Running of external processes and linking of external libraries • Debugging • Memory interface • Time • System properties • Utiltity functions like arraycopy
The runtime library: java.lang • Thread, ThreadGroup for threads • A Thread is like an internal process • Run multiple threads at the same time • Combine threads in a group for security control • Monitors are used to manage shared resources • Math = Math library • Contains mathematical routines • sqrt, cos, sin, log, ln ...
The runtime library: java.lang • Throwable • Base class for Exceptions and Error • SecurityManager for security • Performs security checks (when installed) • Access to call stack
The runtime library: java.lang • String • Unicode! • 16 bit char = 65536 possible characters • Functions • String can be concatenated with + • System.out.println( "File : " + file + " : " + exception ); • substring, indexOf, trimming • Conversion from number to String • Symbols (unique value with intern() )
The runtime library: java.lang • StringBuffer • Used to concatenate strings • Expensive: • String concat = "";for ( int i=0; i<10; i++ ) concat = concat + i; • Less Expensive • StringBuffer sb = new StringBuffer();for ( int i=0; i<10; i++ ) sb.append( "" + i );String concat = sb.toString();
The runtime library: java.io • Streams are used for byte access to files • Readers/Writers are used for Unicode access • Streams, Readers, Writers can be used as pipes • Buffering • Data access (e.g. getInt(), getShort() ) • Between threads (PipeXXXXX) • Conversion from stream to reader/writer • ObjectStreams
The runtime library: java.net • Access to the net (TCP/IP) • InetAddress • Stream connections: Socket, ServerSocket • Extendable: SocketImplFactory • URL, URLConnection • Extendable: URLStreamHandlerFactory • Datagrams • Unicast/Multicast
The runtime library: java.util • Useful classes • Collections: Vector, Hashtable, BitSet, Properties, Stack, Enumeration, Map, Array, Iterator • Time: Date, Calendars, TimeZones • Locale: Locale, ResourceBundles • Random • Observable • StringTokenizer • EventObject, EventListener
The runtime library: other • java.rmi • Remote method invocation support • java.math • Big Integer (unlimited digits) for private/public key calculations
The runtime library: more other • java.security • Classes for certificates, principals, permissions • java.sql • Access support to SQL databases • java.text • Support for language independent messages • java.util.zip • Access to zip files which are the preferred delivery vehicle for java applications.
The runtime library: more other • java.util.jar • Access to jar files and their manifest • java.lang.reflect • Access to objects in runtime via reflection on their interfaces • java.beans • Support for Java beans
The runtime libraries: GUI • Original AWT in 1.0 was … well, awful • JDK 1.1 at start 1997 improved significantly • Netscape released lightweight GUI called IFC at that time • SUN decided to develop their own lightweight GUI at the end of 1997 • Netscape joined them SUN team and stopped support for IFC
GUI: AWT • Uses peer model • A widget controls a native widget • Supports "native look and feel" • Event model: • first based on single dispatching method handleEvent • Today based on listeners • Layout managers • LightWeight components
GUI: IFC • Derived from NeXT, adopted by Netscape • Lightweight components • Very clean code, small, reliable and included in Netscape Communicator • Internal windows, drag & drop • Event handling via strings • Powerful GUI builder called Constructor • Available (including source) but not maintained
GUI: JFC • Derived from IFC (same people [@ start]) • Lightweight components, listeners • JButton top = new JButton("Top");top.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("top"); }} ); • Compare Smalltalk, there it would be:Button top = Button new: 'top'.top action: [ Transcript print: 'top' ]. • HUGE • Based on Model-View paradigm & Pluggable UI • Easier to use than it looks
GUI: JFC complexity, the button L&F ... Button UI Abstract Button Button Model Default Button Model JButton JToggle Button JMenu Item JRadio Button JCheck Box JCheckBox MenuItem JMenu JRadioButton MenuItem
Components: Beans • Components are wrapped objects • Access via reflection • Allows runtime composition of systems (via end users?): Visual Programming • Properties can be set via strings Bean Methods Events Properties
Java Beans • Events follow the listener model • SomeBean bean = new SomeBean();bean.addTickEventListener(new TickEventListener() { public void tick(TickEvent e) { System.out.println("tick");}}); • Properties are defined via methods that start with get/set • E.g. property "tickCount"public class SomeBean { public long getTickCount() { … } public void setTickCount() { … }} • Bean programmer can override defaults with an Introspector
Enterprise Java Beans • SUN's attempt to enter the enterprise computing market • Mainframe connectivity • Application Servers • Message Queues • Transactions EJB client