Computer Laboratory

Course pages 2011–12

Further Java

Principal lecturer: Dr Alastair Beresford
Additional lecturer: Dr Andrew Rice
Taken by: Part IB
Past exam questions
Information for supervisors (contact lecturer for access permission)

No. of practical classes: 5 x 2-hour sessions
Prerequisite course: Programming in Java, Further Java Briefing
Companion courses: Concurrent and Distributed Systems
This course is a prerequisite for the Group Project.


The goal of this course is to provide students with the ability to understand the advanced programming features available in the Java programming language, completing the coverage of the language started in the Programming in Java course. The course is designed to accommodate students with diverse programming backgrounds; consequently Java is taught from first principles in a practical class setting where students can work at their own pace from a course handbook. Each practical class will culminate in an assessed exercise.

Practical classes

  • Communication and client applications. This class will introduce the Eclipse development environment. Students will write a simple client to send and receive data to a server via TCP.

  • Serialisation, reflection and class loaders. This class will introduce object serialisation. Students will use a class loader and reflection to inspect an object which is only available at run-time.

  • Concurrency and synchronisation. This class introduces the concurrency and synchronisation primitives found in Java. Students will implement a thread-safe first-in-first-out queue and learn about Java generics.

  • Server applications. Students implement a server in Java which is capable of communicating concurrently with mulitple clients.

  • Databases. This week students will use Java annotations and a relational database to build a persistent store.


At the end of the course students should

  • understand different mechanisms for communication between distributed applications and be able to evaluate their trade-offs;

  • be able to use Java generics and annotations to improve software usability, readability and safety;

  • understand and be able to exploit the Java class-loading mechansim;

  • understand and be able to use concurrency control correctly;

  • understand the concept of transactions and their application in a range of systems.

Recommended reading

* Lea, D. (1999). Concurrent programming in Java. Addison-Wesley (2nd ed.).
Bracha, G., Gosling, J., Joy, B. & Steele, G. (2000). The Java language specification. Addison-Wesley (2nd ed.).
Bacon, J. & Harris, T. (2003). Operating systems or Bacon, J. (1997) Concurrent systems (2nd ed.). Addison-Wesley.