COP 2805C
Java Programming II

View Weekly Course Schedule   Other interesting links:

Resources (examples, links, ...)

  Instructions for Programming Assignment #1.
  Instructions for Programming Assignment #2.
  Instructions for Programming Assignment #3.
  Instructions for Programming Assignment #4.
  Instructions for Programming Assignment #5.
  Instructions for Programming Assignment #6.
  Instructions for Programming Assignment #7.
  Instructions for Programming Assignment #8.

Weeks of Programming

Can Save You

Hours of Planning

Reported by: "Anne Applin" <anne.applin@GMAIL.COM> - The source for the Java SE, JDK, and more.
On-line version of the Java 8 JDK docs.  ( Java 8 API docs.)
On-line version of the Java 12 JDK docs.  (Java 12 API docs.) - links to all official Java documentation, including references, guides, and tutorials.
Online textbook supplements and Student Resources - Liang's textbook companion website for 9th edition.  (The companion site for the 11th edition requires the access code from the book.)
Online Java Language Reference - The final word on Java; explains obscure language features.
Online Java Tutorials — Excellent tutorials on all topics, including sample code, but not yet updated for Java 9.
Online training articles from Oracle.
IBM Java developerWorks — Large collection of beginner to expert articles on all things Java. A large collection of OO tips, techniques, and design patterns. The site for UML standards, tutorials, and more.
Tampa Bay area Java Users Group.
Java Certification Programs and Oracle Certified Associate (OCA) exam topics.  (See also Oracle Certified Professional (OCP) exam topics.)

COP 2805C Syllabus

Spring 2019

Course policies
Time & Place: Ref No. 20040: Tuesday & Thursday, 7:00–8:35 PM, Dale Mabry Room DTEC–427
Instructor: Name:  Wayne Pollock
Email:  Internet:
Office & Phone:  DTEC–404, 253–7213
View my Office Hours.
Skype ID:    
Homepage URL:
Text: Liang, Y. Daniel, Introduction to Java Programming, Brief Version 11th Edition ©2018 Pearson/Prentice-Hall:
ISBN-10: 0-13-461103-9,   ISBN-13: 978-0-13-461103-7

(There may be PDF versions or book rentals available, to save money.  There may also be a possibly cheaper international edition, but despite vendors' claims, the content is not always exactly the same.)

HCC bookstore online

Description: (This course is 3 credit hours long.)  “A continuation of COP 2800.  The focus is on software development workflow tasks (requirements, design, testing, deployment).  Topics include advanced object orientated and functional programming in Java, collections, multi-threading, files, database use, and other features of modern Java.”
Objectives: The student will demonstrate a knowledge of the following topics through objective tests, hands-on activities, and projects:
  1. Identify professional ethics, intellectual property rights, and software licensing issues, and understand the responsibilities these incur for software developers
  2. Understand and use modern version control systems and software repositories, including Git and
  3. Understand how to digitally sign applets and applications, and the related security concepts
  4. Identify deployment and operational issues of software, and the use of Java WebStart
  5. Create and use jar files
  6. Understand and use advanced Java features including exceptions, reflection, annotations, weak references, enums, and autoboxing and unboxing
  7. Work with files and I/O, and Java preferences, and understand the concepts of persistent data (CRUD)
  8. Understand and select appropriate collection types and implementations generic collections, and perform common operations on collections
  9. Understand how to construct internationalized applications, and how to use Unicode text safely (using standard normalization, sanitation, and validation techniques)
  10. Understand and build applications using advanced object-oriented programming concepts (such as design patterns and basic UML)
  11. Conduct and participate in code review activities, in a professional manner
  12. Understanding testing (especially unit testing), assertions, tracing, and logging
  13. Understand multi-threading concepts and build multi-threaded applets and applications
  14. Understand how to use databases from a Java program
  15. Identify the concepts and components of Java EE (enterprise) applications
Prerequisite: COP 2800, or permission of the instructor.  Students enrolled in a degree or college credit certificate program must complete all prerequisites.  Note!  HCC registration computers may not check for all prerequisites before allowing you to enroll.  Be certain you have all required prerequisites or you won't have much of a chance of success.  Also you may be dropped from the class.
Facilities: All assignments can be performed on any computer that supports current Java SE and the Java EE development tools.  (These include the HCC classroom and Computer Lab computers.)  You can obtain the JDK from or from, and other (free) tools, which will be introduced as needed, along with install and setup directions.  (These are all free tools, and often the tools of choice in the industry.)  You will also need to create a (free) account at

You will need your own flash disk (preferably USB-3 compliant), writing materials, and Scantron 882–E or 882–ES forms.

You can use HawkNet (WebAdvisor) to obtain your final grade for the course.  You can use your assigned Hawkmail (Hawkmail365) email address (or send mail from Canvas) if you wish to discuss your grades via email.  you wish to discuss your grades via email.  (Note, it may be possible to setup your Hawkmail account to forward all received emails to some outside email account; but you still must send mail from Hawkmail to discuss grades.)

Most college systems use a single sign-on user ID, known as HCC “NetID”.  Visit to register and to update your credentials.  (Your initial password is your uppercase first name initial, lowercase last name initial, and your seven digit student ID number.)  Note, the quickest way to resolve login issues is the HCC Live Web Portal (

The college provides wireless network connections for students and guests on Dale Mabry campus.  For students, select the network “HCC_Wireless” from the list of available networks.  Follow the on-screen steps by entering your HCC email address and network password.  For HCC guests: Select “HCC_Guest” from available networks.  Follow the on-screen steps to complete registration.  This network will be available between 7:00 AM and 10:00 PM.  These are the only official HCC networks; don't use others that may appear.

Hawk Alert text messaging service allows you to receive important information regarding campus closures or emergencies.  You may also sign up for financial aid notifications and registration and payment deadlines.  This is a free service, although some fees may be applied by your cellular service provider or plan for text messages.  To sign up, or for more information, visit

HCC's Student Assistance Program (SAP) offers resources tailored to student life, providing you with the right tools to help you through some of life's toughest challenges.  The college has contracted Baycare Health Management to provide free, professional, confidential counseling by telephone and in person.  A wide range of topics may be addressed through this program, including mental health counseling, budgeting, and financial concerns.  Please call 800-878-5470 or send email to for further information.

HCC DM Open Lab

Computers with Java software installed are located in the computer science department open lab in DTEC–462.  Lab hours are:

Monday – Thursday8:00 AM to 10:00 PM
Friday 8:00 AM to 4:30 PM
Saturday 8:00 AM to 2:30 PM

(Note:  Lab technicians (“Lab Techs”) are not teaching assistants or tutors, and shouldn't be expected to help you with your coursework.)

Rules for Using HCC Facilities

  1. No food or drinks near computer equipment.
  2. Students bringing their own laptops need to use the wireless network only.  Students cannot disconnect network cables from classroom's computers to connect their personal devices.
  3. Students are not allowed to disconnect monitors or computers to power their personal equipment.
3 equally weighted exams:     50%
Programming projects (about 8):     50%
Classroom participation:     +5%

Grading scale:  A=90-100,   B=80-89,   C=70-79,   D=65-69,   F=0-64
(Or you can elect to “audit” the class during the add/drop period.)

  • Course format is interactive lecture, with projects done mostly outside of class.
  • No makeup exams will be offered without the prior approval of the instructor.  If a make-up exam is offered, you can take the exam in my office during my regular office hours, or from the Dale Mabry Testing Center.  (Check for their hours of operation, and make sure to give yourself sufficient time to complete an exam.  You will need to make an appointment to schedule a make-up exam.)
  • Exams will be closed book and closed note multiple choice exams.  While the exams are non-cumulative, each does build upon knowledge acquired earlier.  Exams are based mostly upon material presented in class however some questions may be from assigned readings (the textbook and online resources).
  • Exams will only cover material discussed in class or assigned as reading, before the exam.  Should the class fall behind the course schedule, some topics shown on the syllabus due for an earlier exam will be tested on the following exam instead.
  • The schedule for the final week of the term may cause a conflict between our class schedule and another class's final exam.  It is up to you to determine if you will have a conflict, and to bring it to the attention of your instructor, so that appropriate arrangements can be made.
  • Regular attendance is imperative for the successful completion of this class.  The textbook and online resources should be considered as required course supplements; in other words, the course is not based on the text.
  • All phones, pagers, and beepers must be turned off during class time, except with prior permission of the instructor.  No food or drink is permitted in HCC classrooms.
  • Attendance will be taken within 5 minutes of the start of class; after 4 unexcused absences and/or lateness, the student will lose 2 points off the final grade for each additional occurrence.
  • If you miss a class, you are still responsible for the material covered in that class.  All students should exchange contact information (name, email address, phone number) with at least one other student in the class.  If you must miss a class, you should then contact another student and request they take class notes for you.  (Note, Hawknet has Hawkmail365 email for HCC students.)
  • Credit for class participation includes attendance, preparedness, and adding to class discussions by asking questions and participating in discussions.  Playing computer games, surfing the Internet, or working on assignments for this or other classes during class time will lose you credit.
  • Additional time outside of class will be required.  For typical students an average of between 6 and 10 hours each week outside of class are required for preparation, practice, projects, and homework assignments.
  • Students are expected to prepare for each class by completing all reading assignments, reviewing examples and model solutions provided, and practicing outside of class.  This is important — you can't learn a skill such as Java programming only by attending class and reading books.  You must practice several hours a few days each week!  If you won't have enough time available, consider auditing the course.
  • Students are expected to check the class website regularly.  Any syllabus changes, class cancellations, project assignments, and homework assignments are announced in class and posted to the website and the RSS feed for this class.
  • A student shall not, without my express authorization, make or receive any recording, including but not limited to audio and video recordings, of any class, cocurricular meeting, organizational meeting, or meeting with me.  Further, you do not have my permission to post on the web or otherwise distribute my class lectures and other course materials.  (You can distribute freely any materials I make publicly available from the HCC (or the website, without asking permission, provided you give me credit for the work and don't alter it.  Any other use will require expressly given permission.)
  • Working together on individual assignments is considered as cheating!  Turning in someone else's work without giving them credit is also considered cheating (plagiarism).  Cheating will result in an automatic F (zero) for the project for all parties.  Also, you can only earn credit for your own work and not someone else's, even if you do cite your sources.  Note that some projects may be group projects, where each member of a small group works together on a project.  It is also okay to ask a fellow student for class notes (in the event you miss a class) or for help in understanding the text or material given to the class (e.g., examples on the class website).  You are encouraged to study together as well.
  • You must abide by the HCC Acceptable Use Policy (AUP) for computers and services.  In particular, you must not run network scanners, or attempt to obtain administrator (“root”) privileges or otherwise disrupt HCC computers and services.
  • You must follow the academic honesty policy and the student code of conduct for HCC.  A second cheating offense will result in an “F” for the course, and your name will be turned over to the dean for further handling.  I take these matters very seriously.  You have been warned!
  • Every effort will be made to stick to the weekly schedule for our course.  However it may happen that we will fall behind the schedule at some point.  If so, no topics will be skipped.  Instead we will attempt to catch up over the following weeks.
  • Please be aware that if we fall behind on the weekly schedule, the topics discussed may not match what shows on the syllabus.  The weekly schedule may (but probably won't be) updated in this case.
  • In case we do fall behind, projects and exams will not be automatically postponed.  Should your instructor deem it necessary, projects and exams may be rescheduled; this will be announced in class.
  • Communications Policy:  I will respond to your emails within 48 hours or two business days.  HCC policy is that grades can only be discussed in person during office hours, or via email only if you use your assigned HCC HawkNet (Hawkmail365) email account.
  • No appointment is necessary to see me during my scheduled, on-campus office hours.  You can just “walk-in”.  You can make appointments for other times as long as I'm available.
  • Occasionally my office hours will be canceled on short (or no) notice, for example if the dean calls me for a meeting.  Before driving out to campus just for my office hours, you should contact me the day before to make sure I still plan to be there.
  • Late Policies:  Late assignments (homework assignments, projects, or exams) generally will not be accepted.  An assignment is late if not turned in by the start of class on the day it is due.

    Late assignments will be accepted late only if you obtain the instructor's permission prior to the due date of the assignment, or for a documented serious medical reason.  All late assignments are subject to a late penalty of at least one letter grade (10%) regardless of the reason for the delay.

    Projects and homework assignments later than one week will receive a more severe late penalty; very late assignments without adequate excuses will receive a grade of “F” (0).  However if you have a very good reason your instructor may waive any or all of the late penalty.  (Examples of good reasons include extended illness that prevents working, being out of town for work, or military service.  Remember, documentation will be required.)

  • The dangers of the flu or another contagious disease require some changes to normal policies.  HCC is implementing the recommendations for institutions of higher learning of the CDC.  (See and for guidance from the CDC.)  You won't need documentation if you miss class due to the flu.  (But if you think you have the flu, you should see a doctor as soon as you can.)  In the unlikely event of a school closure due to the flu, some plan to make up the missed work will be made.

    If you think you have the flu, stay home.  Do not come to HCC until 48 hours after your fever has broken as you are still infectious.  Also, people are infectious to others for a day or so before they have any symptoms.  Flu is spread by touching doorknobs, computer keyboards, railings on stairs, etc., that were touched by someone with the flu.  Avoid shaking hands; use the “fist shake” (touching of fists) if you must use a physical greeting.  The most effective way to avoid catching the flu is to wash your hands frequently, especially after touching something that was touched by others.  Avoid unnecessary touching of eyes, nose and mouth.  While not as good as properly washing hands, hand sanitizers have been installed throughout the campus; use them often.

Projects: Projects will be assigned from the class web page at various times.  You will have sufficient time to complete the projects, at least a week but usually two weeks.  All projects except the first two will be group programming projects.  You must work on projects mostly outside of regular class hours, although some time during class will be devoted to group project work.

While you should work individually on the first two projects, you must work in a group of two to four students on all other projects, unless approved by your instructor.  From project #3 on, projects will be submitted to a group's designated GitHub repository for that project.  (Each group will have one repo for each of the group's projects; this will be explained before project #3 is assigned.)  Each group member must do their share of the work, and make individual commitsYour grade will depend mostly on your code as shown by your commits to the project repository for your group.

Students will make their code contributions in their own branches.  (Using repositories will be covered in class, and practiced in project #2.)  All students will need to push all their commits (in their own branches) to the group's repository on gitHub.  This is required because not all student's commits will be included in the group's final submission, and I will need to see the code produced by every student.

There are several ways to organize and run a group.  How you do so is a decision for your group, but here are some suggestions:

  • Pick one group member to be the group leader.  For each project, rotate who the leader is, so everyone has a chance.  A group leader manages the group meetings, schedules, and breaks any deadlocks when group members can't agree.
  • Make each group member responsible for some part of the project, as well as primary code reviewer of someone else's part.  (If you can manage it, have all team members participate in code reviews.)
  • If you can't initially agree on some design or other coding issue, an option is for each team member to work on their own version.  The group then votes on which version to include in the final project, possibly with some modifications suggested by the other group members' versions.

Projects are graded on the following scale:

A = 95% (Excellent: Good design with good comments, style, and extras)
B = 85% (Good: Good design, some comments, readable style, and it works)
C = 75% (Acceptable: Project objectives are met or are close to being met)
D = 65% (Unacceptable)
E = 10-64% (Variable credit: At least you tried)
F = 0% (Didn't hand in the project)

Minor extras worth +5 points, minor omissions or poor design worth -5.

Projects are graded according to their design (25%), how well they compile and run (20%), how well your project meets the requirements specifications (20%), the coding style (15%), the amount (and quality) of your comments (10%), and your creativity in extending the project usefully or an innovative design that uses the features taught in class well (10%).

Projects are not graded when turned in.  They are graded all at once, sometime after the project deadline has passed (usually the following weekend).  Every effort will be made to grade projects within a week of the due date, or as soon thereafter as possible.  (See also submitting assignments below.)

(Be aware that some employers reportedly check on-line code repos of perspective employees.  While you should not be embarrassed by code produced when first learning, remember you do have the option at the end of the term, once your grades have been verified by you, to delete any on-line repos.  I suggest making a clone of your repos on your personal computer, first.)

Submitting Assignments: All assignments (except when noted) must be submitted by email to , and to the designated repository.  Please use a subject such as “Java II Project #1 Submission”, so I can tell which emails are submitted work.  (Questions get answered right away, but submissions may wait a while before I grade them.)

Send only one assignment per email message.  Email your Java source (if requested in the assignment directions) and HTML files by copy-and-paste.  (Please do not send as attachments, except when noted in the project's directions.)  If possible use the “text” and not the “HTML” mode of your email program.

Most assignments will be graded directly from your group's GitHub code repository.  You will still need to submit some parts of assignments by email.  In any case, you need to send an email when your project is ready to be graded.  If possible, have the email message “Cc:” to all the other members.  If so, my feedback comments can be seen by all members (I'll use Reply All).  Such project submissions should include a URL to the repo hosting your group's submission.  Remember, that repo should also include all group members' code, in individual branches named so that your instructor can tell who wrote what.

Note: If you use Microsoft Outlook Express or a similar email program, please be aware that this program has a “feature” that automatically converts slash-slash (“//”) comments in your email to “FILE://”.  Make sure your Java source is correct before you send the email!  If possible, use the “text” and not the “HTML” mode of your email program.

In the event a student submits more than once for the same assignment, I will ignore all but the last one received up to the deadline.  Assignments submitted after the deadline will not count toward your grade except as allowed by the course late policy.  Also, you cannot resubmit an assignment once it has been graded.

To avoid having your submitted work rejected as “spam”, you can use Hawkmail365 to send email to professors.  This doesn't always work either!  If you are having difficulties with this email address, use Canvas email.

If you have an email problem, you may turn in a printout instead.  Be sure your name is clearly written on the top of any pages turned in.  Please staple multiple pages together (at the upper left).

Always keep a backup copy of your submitted projects, until you are certain they have been received and graded correctly.

Academic Calendar
HCC Academic Calendar:
Classes Begin: Monday  1/7/2019   (First class meeting: Tuesday 1/8/2019)
Add-Drop Ends: Friday   1/11/2019
Last Day to Withdraw:  Saturday  3/23/2019
Classes End: Monday  5/6/2019   (Last class meeting: Thursday 5/2/2019)
Grades Available:  Thursday  5/9/2019  (from HawkNet)
HCC is closed on: Monday  1/21/2019 (Martin Luther King Jr. Day),
Monday  2/18/2019 (Presidents' Day),
Monday–Sunday  3/11/2019–3/17/2019 (Mid-Term Break),
Friday–Sunday  4/19/2019–4/21/2019 (Spring Day),
Thursday  3/28/2019 (Faculty In-Service Day)

Consequences of Dropping or Withdrawing

Dropping or withdrawing may have an impact on financial aid, veteran’s benefits, or international student visa status.  Students are encouraged to consult with a financial aid, the VA certifying official, or the international student advisor, as appropriate, prior to dropping or withdrawing from class.

Request For Accommodation

If, to participate in this course, you require an accommodation due to a physical disability or learning impairment, you must contact the Office of Services to Students with Disabilities, Dale Mabry campus: Student Services Building (DSTU) Room 102, voice phone: (813) 259–6035,  FAX: (813) 253–7336.

HCC has a religious observance policy that accommodates the religious observance, practices, and beliefs of students.  Should students need to miss class or postpone examinations and assignments due to religious observances, they must notify their instructor at least one week prior to a religious observance.


Quotes on learning
Quotes:         Tell me and I'll listen.
Show me and I'll understand.
Involve me and I'll learn.
    — Lakota Indian saying
        Learning is not a spectator sport!     — Chickering & Gamson

Course schedule for COP 2805

Day by Day Course Schedule
Tue         Thu
Topics Readings
1/8     1/10  

Review: Course policies.  Understanding .class files, JREs, and byte code.  IDE (Eclipse, IntelliJ IDEA, and NetBeans) and common tool-chains (JDK, Maven, code review tools, continuous integration (CI) tools.  Professional ethics, software licensing, and intellectual property rights. Chapters 1.11, 1.12 (NetBeans and Eclipse), 2.16 (Software Development process), Liang online supplements: III-E (Packages), III-W (Java profiler), II-B through II-E (Netbeans and Eclipse Overviews), Eclipse documentation (the “Workbench User Guide” and “Java development user guide” sections), IntelliJ IDEA documentation (the “Running IntelliJ IDEA for the First Time” video), NetBeans documentation (the “Java Quick Start Tutorial” and “Developing General Java Applications”), Maven by Example (chapters 1–3), Software Engineering Code of Ethics, Five Things Every Software Developer Should Know About Intellectual Property.
Additional Links
online Maven resources, Eclipse, IntelliJ IDEA, NetBeans (also, Another Eclipse tutorial, Apache NetBeans documentation (not yet complete). online ethics and licensing resources

1/22     1/24
Versioning (or revision) control systems (VCS), especially Git, and using them with IDEs.  Using Github.  Git workflow, creating and using pull requests and patches.  Exceptions: checked vs. unchecked, using and defining, try-catch-finally blocks, using try-with-resources (Java 7).  System.exit, finalizers, and shutdown hooks.
Jar files (and sealed packages).  Basic security (including public-key encryption) and code-signing (using keytool and jarsigner).
Project #1 (IDE) due 1/22
Chapters 12.1-12.9 (Exceptions), Liang online Java supplements: III-N (jars), Eclipse Git User Guide - GitHub Tutorial, Eclipse Git User Guide - Starting from Existing Git Repositories, Git Tutorial for NetBeans
Additional Links
online VCS and Git resources, online Exception demos, online code signing tutorials and demos, Jar tool and manifest file lecture notes
  Mon 1/21 Martin Luther King Jr. Day  —  HCC closed  
  1/29     1/31  

System properties.  Boxing and unboxing.  Interfaces.  Initialization blocks.  static import.  Clone method, copy constructors, and advanced object construction techniques.  Enums.  Annotations.  Covariant return types.  Varargs.  Reflection. 
Project #2 (Git) due 2/5
Chapters 13.5-13.8 (interfaces), Appendix I (enums), Liang online Java supplements: III-I (initialization blocks), Oracle Java tutorials for: “Initializing Fields” (including static initialization blocks), “Using Package Members” (including static import),“Enum Types”, “Annotations”, “The Numbers Classes” (for boxing/unboxing), and “Passing Information to a Method or a Constructor” (varargs); covariant return types tutorial )PDF), Oracle's Reflection tutorial
Additional Links
online Exception demos, online properties, boxing, enum, initialization blocks, annotations, covariant, and reflection resources
  2/7   Exam #1  
  2/12     2/14  

  2/19     2/21  
Persistent storage, CRUD operations and applications.  Choosing file formats (or data management system): text, XML, JSON, binary, etc).  Designing file (and message) formats, including magic strings, version numbers, encoding, and other factors.
Files and I/O (, java.nio), JFileChooser.  Object serialization.  Database access using JDBC (SQL) and using JPA.
Using the Preferences (java.util.prefs) API.
Project #3 (Search Engine part 1: Workflow Setup, System Architecture, UI) due 2/19
Chapters 12.10–12.13 (text I/O), 17 (binary I/O), Database Concepts (PDF)
Additional Links
Liang online supplements V-C and V-D (XML), Oracle Java Tutorial for I/O, online file and I/O resources, online XML and JSON resources, Liang online supplements IV-E, IV-H (databases), online database resources
2/26     2/28 Java Collections: arrays (review), types/interfaces (List, Set, Map), common implementations (Linked List, Hash, Tree).  Creating proper equals, hashCode, and compareTo methods (used by collections).  java.util.Collections utility methods. Chapter 11.11 - 11.12 (ArrayList), IBM Developerworks Java Collections tutorial
Additional Links
Oracle Java Collections tutorial, online Collections resources
  3/5     3/7   [Soccer Match at Raymond James 3/5 @5:15 PM.  Expect traffic delays, public bus schedule changes, and parking problems.  Parking passes will be distributed in class prior to game day.]
Generics.  Aggregate operations (Java 8 streams); using Optional to handle null values.  The garbage collector and Java memory model, weak/soft references, WeakHashMaps.
generics.pdf (tutorial from Joshua Bloch's Effective Java), Aggregate Operations - The Java Tutorial, Reference types tutorial (skip Reference Queues and Phantom References)
Additional Links
online Generics and Streams resources, and online memory, garbage collection, and Reference resources
3/11 – 3/17 Mid-Term Break  —  HCC closed  
3/19     3/21 Testing software.  Using JUnit testing framework.  Using Java assertions.  Logging for Java.
Project #4 (Search Engine part 2: Persistence) due 3/19
Liang online supplements III-R (Junit), III-M (assertions), III-X (logging), (Short) JUnit tutorial, Java logging tutorial,
Additional Links
online testing resources, logging demos
  3/26   Exam #2  
3/28   Faculty In-Service (All-College) Day  —  HCC Classes Canceled  
  4/2       4/4   Encoding (Unicode, UTF-8, ISO 8859-1).  Secure, safe coding practices (normalization, sanitation, and validation of data crossing trust boundaries).  Internationalization (I18N), Localization (L10N), Locales, java.text.*, resource bundles, property files.
Project #5 (Search Engine part 3: Collections) due 4/2
Internationalization tutorial from Oracle
Additional Links
online I18N resources
  4/9       4/11

4/16       4/18  
Object-oriented analysis and design.  Modules, micro-services, and API design (including RESTful APIs).  Introduction to design patterns.  Model-View-Controller (MVC) and other design patterns.  Enterprise applications and data centers (Docker containers, clouds, etc.).  UML.  Code reviews.
Project #6 (Unit Testing) due 4/11
Chapter 10 (Thinking in Objects), Pages 325-326, 329, 334-335, 376-377 (UML diagrams), Liang online supplements III-N (Design Patterns) and III-X (UML), CRC Cards, UML Tutorial
Additional Links
online design resources, online code review resources, online UML resources
  Fri – Sun  
  3/19 – 3/21  
Spring Day Weekend  —  HCC closed  
4/23     4/25 Multi-threading concepts and issues: object locks, synchronized blocks.  Legacy primitives: wait, notify, notifyAll.  Map-Reduce, Fork-Join, and other newer Java concurrency features.  Timer classes.
Project #7 (RFP) due 4/23
Oracle's Concurrency Tutorial (especially “High Level Concurrency Objects”)
Additional Links
online Multi-threading resources (which include several much more readable tutorials)
  4/30   Time permitting:  Service monitoring and management.  Incident response.  Management and monitoring of applications and the JVM.
Java EE web applications (overview) and WAR files.
Monitoring using Jconsole (, monitoring demos, online Java EE resources, online ITSM, monitoring, and incident response resources
  5/2   Final Exam
Project #8 (Mini-Golf: requirements and design) due 5/2



course resources
Bytecode Demo Bytecode Demo using javap Demo of bitwise operators
Java Setup Instructions for re-creating the Java setup of our classroom, including the install of NetBeans, Eclipse, JDK, Ant, Maven, JUnit, Derby database, and other tools     OpenMeetings Apache project, used to facilitate group communications (when working on group projects, for example)
Windows free hex editor Neo A good hex editor, useful for examining class and other non-text files  (Another good one is Cygnus Hex Editor)     Groovy A Java-like scripting language for the JVM
Dealing with Poisonous People An interesting read about working on open-source projects, but much of the advice applies to any software team     Dinosaur Brains: Dealing with All THOSE Impossible People at Work A good book  (See also Dealing with difficult team members and 20 Ways to Deal with Difficult Co-Workers)
Soft Skills A discussion of certifications, job interviewing tips, and required “soft skills”     Working with Difficult People A good tutorial, from
Apache Maven Home Information and downloads about the Maven project management and build tool     Maven books online Free books from  (See especially Maven by Example to start learning Maven)
Maven Demos A typescript of using Maven, sample POM files, and more     Maven Central Repository The standard maven repository at  (See also
Software Engineering Code of Ethics ACM code of ethics and professional conduct  (See also the IEEE code of conduct and code of ethics)     Online Ethics Center Information and case studies
SCU Markkula Center Santa Clara University Markkula Center for Applied Ethics     Using the ACM Code of Ethics Some case studies  (See also the original version of this article downloaded from
The code I’m still ashamed of by Bill Sourour Story of what happens when you violate professional ethics     Oasis Open Standards Certifies some standards as open  (Other sources of open standards include RFCs, ANSI, and ISO)
Open Source Licenses A comparison, listing, and description of most licenses from Open Source Initiative  See also and, for “at-a-glance” license info     GNU/FSF Open Source License Comparison A comparison of many licenses to the GNU GPL, including the CDDL used by OpenSolaris
Articles on open source licenses from ACM Queue Magazine From the May 2004 Issue:  There's No Such Thing as a Free (Software) Lunch, Is Open Source Right for You?, and Open Source to the Core FLOSS project evaluation; shows codebase statistics, number of contributors, reviews, and other information you can use to compare and evaluate projects (formerly,
FLOSS Chart 1 Compares licenses from free as in beer viewpoint.     FLOSS Chart 2 Compares licenses from free as in freedom viewpoint.
A Concise Introduction to Free and Open Source Software An overview and history A good resource for copyright and licensing issues  (For example, this Copyright Overview and FAQ)
Five Things Every Software Developer Should Know About Intellectual Property A short overview     Copyright quiz Informative and fun, and includes the answers
User Guide to EULAs A consumer guide from the EFF  (See also this EULA cautionary video)     Copyright Crash Course An overview of copyright and licensing
Git home The Git version control system  (See also the excellent online “Pro Git” book) Easy to use public (or private) Git repository  (See also GitHub for Windows)
Sample Git repo visualization and log A demo showing a small repo that had two branches (which were merged)     Git for beginners: The definitive practical guide A nice collection of how-to information from
Git From the Bottom Up A short, readable introduction to Git concepts  (See also the Git tutorial man page)     Everyday Git with 20 Commands or so Brief explanations and examples of the most used Git commands
Git for ages 4 and up Excellent YouTube video that makes Git make sense  (See also the Git Overview YouTube videos (four of them, teaching VCS concepts with Git)     GitHub Overview More YouTube videos for GitHub and Git basics  (See also this highly recommended YouTube video series for Git and Github)
    Pull Requests and Patches A tutorial explaining use of pull requests and patches
Eclipse Git (“EGit”) User Guide See also this Git tutorial for Eclipse YouTube video A tutorial-style reference  (See also Git manual page with many links)
Git Tutorial for NetBeans All you need to know (if you already know Git)     Subversion home Subversion version control system
Mercurial Tutorial A tutorial on Mercurial, and for DVCSs in general     CVS home See also CVS Tutorial for NetBeans Demo of catching and throwing exceptions  (See also Demo of using Java7 automatic resource management (try-with-resources) Demo of using shutdown hooks Demo of Finalizers
WebStart Demo Demo of using WebStart (JNLP) for a file viewer app     JNLP Developer Resources WebStart and JNLP docs, including API examples, FAQ, and other information
Code Signing Demo Demo and tutorial of Applet code signing     Security tutorial Tutorial on security and public-key encryption, from's DevEdge site (from the Internet Archive) Demo of Java 5 auto-boxing     IfaceDemo Interface demo (shows default method use) Lists Java system properties and their values Initialization block demo Demo of the telescoping constructors pattern Slightly more complete (“production quality”) example of Demo of the builder pattern to replace complex constructors Demo of enums
Enum in Java 5 Tutorial on Java 5 enums Java 5 Annotations demo Simple varargs Demo     Annotations Java 5 Annotations lecture notes Shows how to implement clone, using covariant return types Simple Reflection Demo
Java Tutorial for I/O Official Oracle Java tutorial, including old (streams) and NIO (including Java 7 NIO.2) Show how to calculate the MD5 checksum of a file Shows non-GUI input with Scanner Shows reading, writing files with encodings  (Download UTF-8-demo.txt for Prints a directory listing. A short demo to open, read, parse a file of data, and create a List of objects     People.txt A (very) short text file to use with A short demo to open, read, and write to an ASCII text data file     RandomAccess.dat A (very) short text file to use with A short demo of serialization, used to make deep copies of arrays and other objects     NIO Tutorial (PDF) from IBM DeveloperWorks Uses java.nio classes to copy a file     Tutorial for Java NIO (PDF) A shorter (but slightly more readable) version of the IBM tutorial on using java.nio Uses java.nio memory-mapped I/O (use with the sample file MemMapData.txt)     Tutorial for NIO.2 Short NIO.2 tutorial (with example code) from IBM DeveloperWorks
JfileChooserDemo Shows a GUI file chooser dialog        
XML and JSON Lecture Notes (PDF) A copy of my lecture notes  (See also these XML sample files and demos)     XML Tutorial An excellent “hands-on” tutorial, from XML Demo of DOM API XML Demo of SAX2 API Demo of XML DOM parsing     JAXB XML Demo Demo of XML marshalling (object to XML) using JAXB
XML-XSL-Demo XSL (XML Style Sheets) Demo Sample YAML file  (See for links to the specification and for downloads) JSON documentation and references  (See also RFC 4627)     Sample JSON text Found on Adobe Labs GitHub site Demo of using Google's FOSS JSON library  (Requires the gson-<latest-version>.jar file to be put into your extensions directory; click the “jar” link)     Gson Home Google's JSON library home  (See also the Gson User Guide.  You can also download the Gson API docs (click the “javadoc.jar” link) and extract the docs locally for reference)
org.json Library A simple JSON library for Java; download the latest version by clicking the link “jar” (and optionally the API docs “javadoc.jar”) Demo of using org.json library  (Requires the json-<version>.jar file to be found on CLASSPATH) Demo of using the popular JSON library  (Requires four Jar files (it's modular): jackson-core, jackson-annoations, jackson-databind, and jackson-jsr310)     Jackson Home FasterXML JSON library home
Avro Demo Demo of Apache Avro binary file processing  (The zip file contains the all files, including the four Jar files needed)     Avro Getting Started Guide The two Jackson JSON Jar files can be downloaded from Maven Central repos  (You need jackson-core and Data Mapper for Jackson  (Jackson home is at
Database Lecture Notes (PDF) A brief overview of database concepts, and how to use databases in Java     Databases for System Administrators Similar to the lecture notes, but with information appropriate for system administrators.  (It does include a worked example of normalization)
Introduction to Apache Derby Tutorial from IBM DeveloperWorks, showing how to use the database from a Java EE server        
Coffee Database Directions to create an ODBC Text database on Windows  (Note that ODBC is not supported as of Java 8.) A (free) GUI Java database client, to work with (nearly) any type of database Simple JDBC demo, displays a table from a database MultiThreaded Swing GUI and JDBC Demo
JPADemo Simple Java SE application, showing JPA (with EclipseLink) to create and use a JavaDB (Apache Derby) embedded database.     Derby Docs Tutorials and reference for Apache Derby Fancy JDBC demo of the embedded Derby database Shows the Java Preferences API
Collections Tutorial from IBM Developerworks Short tutorial on using Collections (copy on     Oracle Java Collections Tutorial A more through tutorial on Collections
Collections tutorial Another Collections Tutorial from IBM DeveloperWorks     Oracle Guide to Java Collections Additional Java Collection resources Demo of using various Java collections Demo of using Java 8 features to sort a List Simple class to demonstrate proper equals, hashCode, toString, and compareTo methods     HashCodes Steps to create your own hashCode methods Demo List and some java.util.Arrays methods, to remove adjacent duplicates Demo using complex data structures (nested collections) and also a generic class
generics.pdf Excellent tutorial on using Generics from Joshua Bloch's Effective Java     Generics tutorial Generics Tutorial from IBM DeveloperWorks  (See also Generics Without Pain)
Generics Tutorial from Oracle Tutorial and complete reference to using Generics (See also this older but somewhat simpler Sun Generics Tutorial from Oracle) Demo of a generic method Demo of using Java 8 Streams (aggregate operations) Demo using streams to remove adjacent duplicates Demo of using Java 8 Streams (See also        
RAM layout Shows how primitives and objects are referenced     Understanding Weak [and Soft] References A short but good blog posting explaining Java's Reference types
Java Reference Objects A short but through tutorial on Java's memory model, garbage collection, and References (especially SoftReference and WeakReference)     java.lang.ref Package Description Java API docs for Reference objects Demo of a generic Cache class that uses SoftReferences, and a demo of WeakHashMaps Example of weak and soft reference use
Java Garbage Collection references Discusses the various GC algorithms used with the HotSpot JVM and how to select one, and tune it for performance  (See especially the Memory Management Whitepaper (PDF))     Java (HotSpot JVM) non-standard option reference Describes some (possibly no longer supported) non-standard options, useful to improve performance (of the garbage collector for example)
Testing Overview Lecture Notes on Testing, also logging, tracing, and application management     Test Case Self-Assessment Attempt to generate sufficient test cases for a simple program
ACTS Automated Combinatorial Testing for Software (ACTS) tool from  (See also this short combinatorial testing example and tutorial)     JUnit 4 Testing Demo Demonstrates using JUnit for the sample program (“Triangles”) from the Test Case Self-Assessment  (See also Natural Order Comparator for another example, that shows coverage too)
PICT Microsoft's ancient but good command line test generator tool, version 3.3 (MSI installer; includes a user guide)     A list of pairwise tools A list of popular test generation tools; the site also has tutorials and other resources  (See also the older list at Junit Testing     JUnit 4 API Java docs Online JavaDocs for JUnit 4 API JUnit 4 Tutorial A pretty good JUnit 4 Tutorial     JUnit FAQ Almost a complete tutorial for JUnit 4 JUnit Testing Example for class     Java Code Checker PMD can report (likely) logic errors in your code  (See also SpotBugs for a similar tool) Mockito is a library that allows you to easily create mock Java objects for testing Demo using assertions for pre-, post-conditions, invariants
SQLite Testing Real-world product testing information     Testing horror story A blog post from an Oracle developer, giving a fascinating look at the daily life of a developer as they try to update and test really old code.
Programming With Assertions Java tutorial for using assertions     Assertion Usage Notes Examples of appropriate and inappropriate use of assertions Trivial example of assertion use     Sample trace output The trace output of running the date program on Linux
Debug Strategy Excellent advice from Patricia Shanahan on debugging     Code Coverage Tools Various tools to show how much of your code was covered during unit tests
Arquillian Java EE testing tool     Marathon A test tool for swing GUIs
Selenium A tool to automate web browsers via scripts (useful for testing web based applications); get the Selenium Firefox add-on from A game designed to teach using testing results to design code  (source: Short demo showing Java SE logging API (See also Oracle's Java logging tutorial, and Another logging tutorial)     Apache logging home Download or read about log4j, logging in general, and the GUI log viewer chainsaw Simple logging facade for Java home  (See also the Maven Central SLF4J download site)        
I18N (Internationalization Tutorial from Sun) Tutorial on using I18N, Locales, and Resource Bundles     ISO-216 international paper sizes A clear explanation of A4 and other international standard paper sizes
Java internationalization basics A readable tutorial on I18N and L10N, from IBM DeveloperWorks     Locales and I18N Some notes about using Locales and internationalizing programs
ISO-639 English (and French) language names, and the standard 2 and 3 letter codes     ISO-3166 Country Codes The official list of two and three letter country codes, used in locales
The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets Readable post on     Natural Order Comparator A demo project (complete with API documentation, unit tests, Git repo log, and code coverage metrics) for a natural sort order comparator
Encodings and Character Sets More information then you want to know about Unicode, encodings, etc.     Font concepts Explains Font terms and concepts as used in Java
Markdown A style of text that can be easily converted to attractive HTML     Markdown Cheatsheet - Github (PDF) A quick reference for Markdown, with Github's extensions included  (From Shows how to work with I18N Strings Show all local fonts, list font families Uses Locales, ListRecourceBundles for I18N An Internationalized Applet Displays the JVM version in your browser     Unicode symbols Applet showing Unicode font listings, plus a few symbols Demo showing Unicode String processing, one character at a time Another demo showing Unicode String processing; this demo shows Unicode normalization, String sanitation, and using BreakIterator and Collator to compare Unicode characters A Simple JavaFX form showing how to normalize, sanitize, and validate Unicode text    
Top 25 Errors A list of common security-related coding errors, from and  (See also CERT Secure Coding Standards for Java and other languages)     ISO 27000 (Wikipedia) The ISO/IEC 27000-series (also known as “ISO27k” for short) comprises information security standards  (Some of these standards are freely available here)
SEI Software Development Information from the Software Engineering Institute  (See also their software Architecture and their certification information)     IEEE Computer Society Software Professional Certification Information about the software professional certifications
Software Engineering (Wikipedia) This article discusses certifications and legal requirements     SWEBOK The Software Engineering Body Of Knowledge defines what every software engineer should know (design, testing, and similar topics)
Professional Software Engineering Exam information (PDF) The NCEES (the National Council of Examiners for Engineering and Surveying) will start exams in 4/2013 for software engineers; some states will require practitioners to hold this license (10 so far)  (Software PE exam study materials are available from the IEEE)     ISO 9000 (Wikipedia) This standard refers to the process of creating software (certified compliance is required for software sold in the European Union)  (For project management the most widely recognized certification is Project Management Professional (PMP))
ISO 12207 (Wikipedia) A popular ISO standard for software lifecycle processes     IEEE computer society software professional certification Based on the SEBOK, these IEEE certifications are currently the best way to prove your competency
Bad design and its consequences Story about Toyota's killer firmware  (See also for other case studies)     Therac-25 The story of the deadly design flaws in hospital radiation equipment
Xerox Workcenter copiers change numbers Story about Xerox copier bug that changes data in the copies     Internet IP Geomapping design flaw The story of a design flaw that associates millions of IP addresses with incorrect addresses
Project Proposal for a voice mail system A project proposal     Object Categories A guide to finding objects
Use Case Tutorial An overview of creating use cases  (See also this ACM Queue article on Use Case 2.0)     SRS template and sample A template for requirements docs, designed by the IEEE, with no graphics (downloaded from
Sample GUI Use Cases Some sample use case diagrams for requirements of a simple phone system     Narrative Use Case Example Sample text (non-GUI) use case diagram for design of an ATM (cash machine) system
Sample Requirements Documentation A sample software requirements specification (SRS document; download from     Sample Requirements Documentation (2) A sample software requirements specification (SRS document  (download from
Painless Functional Specifications A readable four-part tutorial on why and how to create SRS (functional specifications), from Joel on Software        
CRC Cards The original paper describing the CRC design method.  (Another example.)     OOD Guide OOA and OOD study guide (lecture notes)
Code review guidelines Good overview, from     Four Ways to a Practical Code Review Describes the process of code reviews
Security code reviews A free online book (PDF) from     Java Code Review Checklist An article from
Code review example A part of a real code review     Peer Code Review Tips Some great tips from IBM Developerworks
Formal code review A YouTube video showing a part of a formal, face-to-face code review        
ChecklStyle An open source tool that checks Java code for style violations (An IDE plug-in is available as well)     Code Review Checklist for Java (PDF) A good starting point
NASA Software Safety Guidebook (PDF) Software Engineering best practices for safety critical systems     Secure Coding Guidelines for Java Best security coding practices from Oracle  (See also The CERT Oracle Secure Coding Standard for Java, from CERT's SecureCoding site)
Synopses of Design Patterns A brief description of many Java patterns     Design Patterns Tutorials, FAQs, and more A large collection of OO tips, techniques, and design patterns     Java Design Patterns 101 A tutorial on common design patterns from IBM Developerworks
Spring framework A popular family of application frameworks  (See also this Spring framework tutorial)     Design Pattern List A list of Java design patterns, with links to explanations and examples, and to some good books
javax.inject The Java EE javax.inject package, which provides a good description and comparison of the factory pattern and the dependency injection pattern     Dependency Injection Another good description of dependency injection (DI), from the Guice DI framework
DI Demo (zip) A demo of dependency injection for Java SE, using the Weld DI framework     Manual DI Demo A Maven project using JUnit to manually perform DI, which hopefully will clearly illustrat the techniques (propery, setter, and constructor injection)
How not to Design a Program A humorous look at over-engineering how to compute factorials  (See also How To Write Unmaintainable Code; Ensure a job for life - PDF)     How to Design a Program An over your shoulder look at thinking about design
How to Design a Good, Regular API Advice and examples of API design  (See also this funny YouTube video on bad RESTful design)     API design - Microsoft Azure Describes RESTful design  (See also Designing, building, and operating microservices on Azure, A Beginner's Tutorial for Understanding RESTful API, and REST CookBook) Many UML resources     IBM Developerworks UMLtutorial A good tutorial from IBM
UML Quick Reference (PDF) An excellent reference card showing one each of everything     UML Reference (PDF) A more complete UML reference
UML Resource Center - IBM UML tutorial  (See also these UML tutorials from IBM/Rational)     Sample UML class diagram UML class diagram of a simple Banking Simulation
Violet UML Editor Originally written by Cay Horstman, this free Java application (a runnable jar file) is a simple but useful UML diagram editor     ArgoUML Free UML diagramming tool that can produce code from the diagrams.  (Not well maintained, but there is an Eclipse plug-in for it.)  A similar tool is nClass
Dia Free diagramming tool (for UML and a lot more)     StarUML The best UML modeler and diagramming tool I've found so far, but it isn't free
Multi-Threading Lecture Notes (PDF) A discussion of the concepts and issues of using Threads     Java Concurrency / Multithreading Tutorial A terse but good tutorial, includes Java 7 additions
Oracle Tutorial on Concurrency Discusses multi-threading features of Java     Java Concurrency Tutorial - A through tutorial, good overview sections for beginners (but covers up to Java 6 features only)
Concurrency Concepts A short tutorial on the basic concepts, from     JavaWord Concurrency Tutorial Series A multi-part tutorial covering the Java 5 and newer techniques and APIs, with links to tutorials for the older material  (See also this other good JavaWorld multithreading tutorial)
Multithreading in Java An good tutorial from, but covers up to Java 6 only Demo of ThreadLocal variables
DiningPhilosophers Sun's DeadLock Thread Demo     Sort algorithm race Sun's Multi-thread Sorting Demo Pseudocode of a Print Server Improved pseudocode of a Print Server Demo of pausing inside of an event handler (and why it's not a good idea) Mutli-threaded Demo showing suspend, resume, and stop Simple Animation using a Thread Swing animation, uses Timer Mutli-threaded Demo of synchronized        
Java Monitoring tutorial See also Java Management and Monitoring resources     Management and Monitoring Demo Shows how to run a managed application and how to monitor it.  (See also docs for jconsole and VisualVM tools)  See also this tutorial on using VisualVM
An Overview of ITSM (PDF) A good 84-page technical overview of ITIL 2011 (version 3), obtained from     Incident Response sample how-to (PDF) The actual plan used by Oklahoma's Office of State Finance Information Services Home of the Apache Ant build tool     Apache Ant manual Includes both a reference and tutorials
build.xml A sample Ant build.xml file for a “hello, world” application     Apache Ant from  See also this Ant Overview (PDF), an excerpt from “Beginning POJOs” by Brian Sam-Bodden,
Excerpts from Java Programming with Ant Includes tutorial chapter and an Ant task reference     Ant Best Practices 15 good tips, from O'Reilly  (See also Make Ant easy with Eclipse, from IBM DeveloperWorks)
myServlet.war Example WAR (Web application ARchive) with a Servlet     Java EE Home Sun Java EE site
Java EE Overview Draft lecture notes     Hello, World RMI demo Simple, basic RMI demo from Sun
JNDI Tutorial Sun's JNDI online tutorial     Mastering Enterprise JavaBeans, 3rd Ed. A great EJB book, for free as a PDF download
Designing Java EE Applications A Sun Blueprint Article     Java EE Tutorial A Sun Java EE Tutorial
Java EE Technology Center Oracle Java EE developer resources A Java EE site with many tutorials     Java EE Architect's Handbook A pretty good Java EE book, available for free from here
Wildfly Home Red Hat's Java EE Application Server, renamed from JBoss for the Java EE 7 version  (The older Java EE 6 version can be found at     WebSphere IBM's Java EE application server
Tomcat Setup Apache's Tomcat web application server install help for Windows  (See also the popular Jetty web application server)     Credit Card Processing A brief overview of e-commerce payment processing Shows Graphic contexts are copies Shows difference of Heavy and Light weight components
Logo2D Java2D Graphics Demo Fancy Text Rendering Multimedia (with sound) applet Display graphics, bundled in a runnable Jar
Printing Demos Several examples of Java printing        
AWT - Swing Simple Swing demo, compares with AWT version Interest Calculator with Swing “PLAF” demo Simple Swing demo Swing JLabel demo Shows how to draw text with styles Swing animation, uses JLayerPane Simple JTable Demo Demo of copy/paste clipboard access A Simple JavaBean Tutorial     Marquee Marquee Java Bean Simple Java Bean with BeanInfo, runnable jar     Download the BeanBuilder A GUI Bean Development Kit  (This project is no longer supported)
JavaBeans home page Read the Specifications and find other related resources     Download the BDK The Bean Development Kit (platform independent version from Sun) is interesting but obsolete
JavaME step by step (PDF) Tutorial on JavaME (Java Micro Edition)        
ChatServer Chat room Server A JavaScript expression evaluator
Java Security Tutorial on Java Security from Oracle A signed Applet to create a file on the local system
Model Solutions to Assigned Projects
Logo2D Java2D Graphics Demo     Office Hours Project Model Solution to Office Hours project #1

[Valid RSS]

RSS iconXML iconRSS feed for this page

What is RSS?