DonationWare! 
I am opening up old courseware to the world on a "pay if you like it" or have it free basis.
My fifth offering is Java Technology and Development.
(You will find other offerings in this site tagged with DonationWare.)
This course was started in ~1996 as Java was becoming popular. I stopped hacking it sometime around 2002, so it had a pretty good run. This version is from sometime in 2001 (it was pretty much the first "reasonably up-to-date" copy I
found in my archive…actually a big pile of CDs).
This course had a lot of mileage: it went around Australia and the US many times, it went around various bits of Asia a couple of times and it went to NZ a few times.
It was used by a team of presenters, each of whom presented it very differently (interestingly enough), and contributed bits and pieces and bugfixes to it (thanks, guys!). Nonetheless, it retained my somewhat cynical/quirky
view of the Java Universe.
It was presented under a few different banners. Never under the transentia banner in Australia.
It was even 'informally' licensed (meaning I pretty much got ripped-off!) to a US company for their purposes (whatever they were…I never really found out).
I have also presented Java courseware for a number of other organisations and I still believe that this is the best.
I remember presenting it for the very first time, to a local ISP in Darwin. After discussing Applets, I was talking about how Applets could be used to build a Tsunami-style D.O.S. attack and bring down a whole network. Suddenly one participant jumped up and walked out and I didn't see him for quite a whle. Turns out that he was the owner of the
company. He later explained that he had just spent a day madly reconfiguring his servers and network to be more resistant to the type of attack I had been talking about. I really scared the poor guy!
When the course first burst onto the world, the course participants were all keen and clever "early adopters": for exercises, it was enough to say "Here is a Java compiler, go build me an 'X'." and everyone had fun, and learned lots
along the way. By the time I knocked it on its head-no more early adopters were coming through and in some cases we had to deal with people who simply didn't want to know but were being told to follow the company line-the exercises were
having to be specified a lot more completely (it seemed like we had to detail practically every keypress and mouse movement). It wasn't so much fun at the end, sad to say!
I also recall telling my colleagues about one participant that really did not know how to use her mouse (this makes life really hard for an instructor; to this day, the phrase "No. Use the other mouse button." has
significance to us) and they were scoffing at me, thinking I was exaggerating. Until the time when one poor guy came back from presenting the course for the first time and said: "I was really shocked. I always thought you were laying it on
thick, but some of these participants didn't even know how to type, let along program." I paraphrase, but you get the idea.
Fun days…
Enough reminiscing! Here's the 'blurb':

Java Technology and Development
A five-day hands-on overview of the Java language and environment
Audience
Programmers, Technical IT Managers, World-Wide Web Administrators and Developers, other IT Personnel and Consultants.
Overview
The Java programming language attracts enormous interest throughout the on-line community. IT professionals are also recognizing the importance of such technologies. This course will provide an understanding of what Java is, its
history, how it works and is used, its application areas, industry support, competing technologies, and so forth.
The course includes a number of practical exercises spread over the five-day period.
Objective
The aim of this course is to provide a proper description and overview of Java as a programming language and distributed system technology. At the end of the course the student will have a sufficient understanding of Java to enable
him or her to undertake software development using Java in various situations, including the development of executable content for the World-Wide Web and the construction of stand-alone applications.
Note: Java is strongly derived from C so knowledge of C or C++ is needed for this course.
Day One: The Java Language
An Overview of Java
An examination of why Java is the sensation it is; where it came from and what it can do:
- history
- comparing Java to other languages
- buzzwords: simple, object-oriented, distributed, robust, secure, architecture neutral, portable, interpreted, high-performance, multithreaded, and dynamic.
The Basic Java Language
An overview of the more straightforward of Java's features together with a brief comparison of Java with its ancestors: C/C++:
- tokens
- reserved words
- types and data values
- operators
- garbage collection
Java Tools
A look at Sun's Java Development Toolkit (JDK):
- why choose the JDK?
- JDK for Windows95/NT4:
- appletviewer
- javac
- javah
- java
- javadoc
- javap
- jdb
- rmic
- jar
- javakey
A quick look at some other tools:
- IBM VisualAge for Java
- Microsoft Visual J++
Programming Java Applications
Writing standalone applications in Java:
- program structure and environment
- application versus applet
- a whole new phylum: aglets, servlets, beans
More Basic Java
More data types:
The flow of control:
- if, switch, for, while, do
- labeled statements
Some of the changes Java 1.1 has brought to the language:
- desktop colors
- internationalization
- deprecated features
- 'blank' finals
- anonymous arrays
- type wrappers
Day Two: More Java Language/Java Applets
Object-Oriented Programming with Java
An examination of the features that make Java an Object-Oriented language:
- classes and objects
- constructors and object finalization
- methods, overriding and parameter passing
- initializers
- inheritance and the IS-A/HAS-A relationships
- accessing run-time type information
- encapsulation: packages visibility modifiers and techniques
- abstract classes
- interfaces
The New Java 1.1 Object-Oriented Features
Java 1.1 introduced a number of features that substantially increased the power and flexibility of the language:
- reflection
- inner classes:
- nested top-level classes
- member classes
- local classes
- anonymous classes
- instance initializers
More Java Language
An examination of the ways in which Java promotes creating robust software:
- exceptions
- using and understanding threads:
- the Runnable interface
- synchronization: mutual exclusion and critical sections
- conditions
Java Applets
Java and executable content on the World-Wide Web:
- applet capabilities
- the <APPLET> tag
- responsive applets
- dual-purpose applets and applications
Day Three: User Interfaces & Java's Abstract Windowing Toolkit
An AWT Overview
A look at the basic concepts underlying Java's "window on the world":
- the Abstract Windowing Toolkit (AWT):
- aim
- fundamental organization
Using Java for simple graphics programming:
- primitive graphics tools
- sounds in applets
Multimedia and Interactivity
Multimedia is one of the driving forces behind Java:
- color handling
- fonts
- images
- animation and double buffering
More AWT
The building blocks of a Java User Interface:
- components:
- button
- checkbox
- scrollbar
- menu
- label, text area and text field
- canvas
- containers:
- panel
- frame
- window
- dialog
- event handling
- layout managers
AWT Enhancements
The enhancements and changes that Java version 1.1 introduced:
- a new event model
- delegation
- listeners and adapters
- lightweight components
- printing
- data transfer; copy and paste; drag and drop
Java Foundation Classes
- Java 2D
- model-view-controller paradigm
- 'swing' components
- drag & drop
The Stream Zoo
A look at some of the many classes for handling input/output:
- standard streams
- "mix & match" capabilities
- files
- random access streams
- tokenizers
- serialization and externalization
- writer classes
The Java Utility Classes
An overview of the classes supplied to remove the need for developers to have to "reinvent the wheel":
- type wrappers
- vector
- enumeration
- hashtable
- property
- random, stack, date, bitset
- Java Collection Classes
Day Four: Advanced Java Programming
Java Beans
An introduction to the Java-based component software infrastructure:
- why Java beans?
- properties:
- simple
- indexed
- bound
- constrained
- events
- methods
- the BeanInfo class
Security
An examination of why and how Java claims to be a secure programming environment for the World-Wide Web:
- the sandbox
- the bytecode verifier
- the class loader
- the security manager
- hostile attacks
- code signing
- access control lists
Java Database Connectivity
A look at interfacing Java with SQL-based relational databases:
- the DriverManager class
- drivers
- connections
- statements
- SQL Utility classes
- ResultSet handling
- metadata
Native Code
A look at the facilities that exist to allow Java to interact with other programming environments:
- Java Native Interface
- Java invocation API
Day Five: Distributed Systems Using Java
Java features aimed at making the development of distributed systems easier:
- URL
- URLConnection
- sockets:
- Remote Method Invocation
- naming
- clients
- servers
- stubs & skeletons
- security
- Servlets
- Enterprise Java Beans
- Java and CORBA
The Future
An overview of some of the exciting developments currently happening in the Java world, such as JDBC, the "100% Java" initiative and the Network Computer.
The course is now well and truly at End of Life.
I figure that it would be such a pity for it to end as a set of bits decaying away on my hard disk so I am opening it up to the world on as "as-is" basis:
java-courseware-donationware.04.july.2009.zip
(MD5: 197bf97bf6020c2ca2ba440f87b59790; size: 6,615,799 bytes)
Some (unfortunately necessary) legalese:
- This content is provided "as-is", with no guarantees.
- Feel free to use it, but not to abuse it (to give a couple of examples: don't make hundreds of copies for friends; don't claim it as your own work).
- I retain copyright, so "all rights reserved."
Enjoy!
If you like it, or have any questions/comments, send me an email (
).
If you find this material useful, please consider paying me a small amount:
via PayPal.