Take the Initial Step to Java Certification
|The Sun Certified Java Programmer (SCJP) examination has recently been updated for J2SE 1.6, which means you'll have to jump through some new hoops to get a passing score. In this primer to SCJP certification, Raj Sharma , CRM Manager of Whizlabs Software, outlines some of the most important changes to the SCJP 1.6 exam, suggests several ways to prepare for it, and offers some sample questions to get you started. This article has been updated to reflect changes to the Whizlabs company name and product name, and to include links to the recently launched instructor-led, online training for SCJP 1.6.
This article serves as a primer to SCJP Certification. To help you prepare for the exam, we'll start with a point-by-point comparison of SCJP 1.5 and SCJP 1.6, outlining the most significant changes to the exam content. In addition, we'll talk about the broader issues of SCJP Certification, such as how to prepare for the exam and whether the time and cost of certification are worthwhile to your career as a Java programmer.
Introducing SCJP 1.6
Table 1 compares the functional differences between the 1.5 and 1.6 versions of the SCJP exams, in terms of cost, number of questions, and time allotted for completion, among other things.
Table 1. SCJP 1.5 vs SCJP 1.6
||Multiple choice, short answer, drag and drop
||Multiple choice, short answer, drag and drop
|Number of Questions:
||58.33% (35 out of 60)
||58.33% (35 out of 60)
||USD $150 (or locally priced)
||USD $150 (or locally priced)
Section 1: Declarations, Initialization and Scoping
- Develop code that declares classes (including abstract and all forms of nested classes), interfaces, and enums, and includes the appropriate use of package and import statements (including static imports).
- Develop code that declares an interface. Develop code that implements or extends one or more interfaces. Develop code that declares an abstract class. Develop code that extends an abstract class.
- Develop code that declares, initializes, and uses primitives, arrays, enums, and objects as static, instance, and local variables. Also, use legal identifiers for variable names.
- Given a code example, determine if a method is correctly overriding or overloading another method, and identify legal return values (including covariant returns), for the method.
- Given a set of classes and superclasses, develop constructors for one or more of the classes. Given a class declaration, determine if a default constructor will be created, and if so, determine the behavior of that constructor. Given a nested or non-nested class listing, write code to instantiate the class.
Section 2: Flow Control
- Develop code that implements an if or switch statement; and identify legal argument types for these statements.
- Develop code that implements all forms of loops and iterators, including the use of for, the enhanced for loop (for-each), do, while, labels, break, and continue; and explain the values taken by loop counter variables during and after loop execution.
- Develop code that makes use of assertions, and distinguish appropriate from inappropriate uses of assertions.
- Develop code that makes use of exceptions and exception handling clauses (try, catch, finally), and declares methods and overriding methods that throw exceptions.
- Recognize the effect of an exception arising at a specified point in a code fragment. Note that the exception may be a runtime exception, a checked exception, or an error.
- Recognize situations that will result in any of the following being thrown: ArrayIndexOutOfBoundsException,ClassCastException, IllegalArgumentException, IllegalStateException, NullPointerException, NumberFormatException, AssertionError, ExceptionInInitializerError, StackOverflowError or NoClassDefFoundError. Understand which of these are thrown by the virtual machine and recognize situations in which others should be thrown programatically.
Section 3: API Contents
- Develop code that uses the primitive wrapper classes (such as Boolean, Character, Double, Integer, etc.), and/or autoboxing & unboxing. Discuss the differences between the String, StringBuilder, and StringBuffer classes.
- Given a scenario involving navigating file systems, reading from files, writing to files, or interacting with the user, develop the correct solution using the following classes (sometimes in combination), from java.io: BufferedReader, BufferedWriter, File, FileReader, FileWriter, PrintWriter, and Console.
- Use standard J2SE APIs in the java.text package to correctly format or parse dates, numbers, and currency values for a specific locale; and, given a scenario, determine the appropriate methods to use if you want to use the default locale or a specific locale. Describe the purpose and use of the java.util.Locale class.
- Write code that uses standard J2SE APIs in the java.util and java.util.regex packages to format or parse strings or streams. For strings, write code that uses the Pattern and Matcher classes and the String.split method. Recognize and use regular expression patterns for matching (limited to: . (dot), * (star), + (plus), ?, \d, \s, \w, , ()). The use of *, +, and ? will be limited to greedy quantifiers, and the parenthesis operator will only be used as a grouping mechanism, not for capturing content during matching. For streams, write code using the Formatter and Scanner classes and the PrintWriter.format/printf methods. Recognize and use formatting parameters (limited to: %b, %c, %d, %f, %s) in format strings.
Section 4: Concurrency
- Write code to define, instantiate, and start new threads using both java.lang.Thread and java.lang.Runnable.
- Recognize the states in which a thread can exist, and identify ways in which a thread can transition from one state to another.
- Given a scenario, write code that makes appropriate use of object locking to protect static or instance variables from concurrent access problems.
Section 5: OO Concepts
- Develop code that implements tight encapsulation, loose coupling, and high cohesion in classes, and describe the benefits.
- Given a scenario, develop code that demonstrates the use of polymorphism. Further, determine when casting will be necessary and recognize compiler vs. runtime errors related to object reference casting.
- Explain the effect of modifiers on inheritance with respect to constructors, instance or static variables, and instance or static methods.
- Given a scenario, develop code that declares and/or invokes overridden or overloaded methods and code that declares and/or invokes superclass, or overloaded constructors.
- Develop code that implements "is-a" and/or "has-a" relationships.
Section 6: Collections / Generics
- Given a design scenario, determine which collection classes and/or interfaces should be used to properly implement that design, including the use of the Comparable interface.
- Distinguish between correct and incorrect overrides of corresponding hashCode and equals methods, and explain the difference between == and the equals method.
- Write code that uses the generic versions of the Collections API, in particular, the Set, List, and Map interfaces and implementation classes. Recognize the limitations of the non-generic Collections API and how to refactor code to use the generic versions. Write code that uses the NavigableSet and NavigableMap interfaces.
- Develop code that makes proper use of type parameters in class/interface declarations, instance variables, method arguments, and return types; and write generic methods or methods that make use of wildcard types and understand the similarities and differences between these two approaches.
- Use capabilities in the java.util package to write code to manipulate a list by sorting, performing a binary search, or converting the list to an array. Use capabilities in the java.util package to write code to manipulate an array by sorting, performing a binary search, or converting the array to a list. Use the java.util.Comparator and java.lang.Comparable interfaces to affect the sorting of lists and arrays. Furthermore, recognize the effect of the "natural ordering" of primitive wrapper classes and java.lang.String on sorting.
Section 7: Fundamentals
- Given a code example and a scenario, write code that uses the appropriate access modifiers, package declarations, and import statements to interact with (through access or inheritance) the code in the example.
- Given an example of a class and a command-line, determine the expected runtime behavior.
- Determine the effect upon object references and primitive values when they are passed into methods that perform assignments or other modifying operations on the parameters.
- Given a code example, recognize the point at which an object becomes eligible for garbage collection, determine what is and is not guaranteed by the garbage collection system, and recognize the behaviors of the Object.finalize() method.
- Given the fully-qualified name of a class that is deployed inside and/or outside a JAR file, construct the appropriate directory structure for that class. Given a code example and a classpath, determine whether the classpath will allow the code to compile successfully.
- Write code that correctly applies the appropriate operators including assignment operators (limited to: =, +=, -=), arithmetic operators (limited to: +, -, *, /, %, ++, --), relational operators (limited to: <, <=, >, >=, ==, !=), the instanceof operator, logical operators (limited to: &, |, ^, !, &&, ||), and the conditional operator ( ? : ), to produce a desired result. Write code that determines the equality of two objects or two primitives.
Preparing for the SCJP Exam
Preparing for any kind of IT Certification is about both studying and practicing. You might want to start with the former and migrate to the latter. There are some excellent books available for SCJP 1.6 Certification, which you can use to start.
In addition to books, you should check out the numerous resources on the Web. Start with the essential Java technology specifications from Sun Microsystems, then scout around to find tutorials that address important topics such as the Assertions API or the Collections API. One nice thing about Web resources is that they're generally more up-to-date than books, so you can use online reading to supplement your less current reading.
See Resources section below for a complete listing of recommended books, articles, tutorials, and specifications.
Practice, Practice, and Practice
After you've prepared with the appropriate books, browsed through the specifications, read the tutorials, articles, and notes, all that's left to do is practice. Start by getting yourself a good IDE and writing code. Choose programming exercises that help you focus on the exam objectives, and don't avoid the stuff you're afraid of. Better to make mistakes on your own time than in the exam itself.
In addition to toiling away under your own direction, there are 2 ways to simulate the test experience before you get to the real thing. Mock exams offer a good sampling of the kinds of questions you'll encounter and give you the opportunity to resolve them on your own time. Certification test simulators take the mock-exam experience to the next level, by actually simulating the test environment.
Another option is to hire a personal coach. Organizations that specialize in Java training provide a structured, disciplined learning environment, and most have a well-established record of success. While personal training costs more than many of the other training resources mentioned here, it can also be a more efficient path to certification, allowing you to quickly gain the skills necessary to pass the SCJP exam.
See Resources section for a listing of IDEs, free mock exams, commercial certification test simulators, and companies that specialize in Java training.
If you're looking for the study-group feeling, try participating in an online discussion forum. Several broad-based Java forums maintain threads about certification issues, and some are devoted solely to certification. In a forum, you can quiz your peers about their study techniques, learn about some of the lesser-known certification resources, get support when you're stressed about the upcoming exam, and find out how others have fared in the effort to get certified.
See Resources section for links to several active online discussion forums.
Tips for Passing the SCJP Exam
No short list of observations about the SCJP exam is sufficient as a complete study guide. To be fully prepared, you'll need to spend some time with at least 1 book on SCJP certification, as well as some of the other resources mentioned in the previous sections. The tips that follow are, however, essential to your success in passing the SCJP exam:
- Many of the questions in the SCJP 1.6 exam will require code-based answers, so practice coding as much as possible in preparation for the exam. .
- Some aspects of the Java programming language do not come up as often in the real life as they do in the exam, which can trip you up if you're not prepared. Be sure you understand how operators work in Java code -- particularly the shift operator.
- Multithreading is a difficult topic, and it will come up in the SCJP 1.6 exam. You should know the different ways to construct a thread in a Java program, have a good understanding of synchronization, and be familiar with the functionality of the different methods used in creating a multithreaded application. In all instances, you should be prepared to deliver code-based answers.
- Be sure you've memorized the inheritance hierarchy of the Exceptions and Collections classes. It will come in handy.
- The objective on Garbage collection will have questions asking how many objects are eligible for garbage collection at a particular point in the program. The answers to such questions cannot be verified with the help of examples because you cannot force the garbage collector to run. So attempt as many questions as possible on this topic from various mock exams; compare your answers to test your knowledge.
.This Certification is Worthwhile...
Java Certification will cost you in terms of both time and money, and it is natural to wonder if the expenditure is worthwhile. The answer has more to do with your expectations than with the inherent value of certification. If you're expecting to get a job just because you're certified, you could be disappointed. A high exam score isn't all that impressive without real programming experience. The combination of experience and certification, however, could help your resume stand out in a competitive job market. Certification might not get you a job, but it could get you a better job. It can also be a big help when it comes to negotiating for a higher salary, lobbying for a promotion, or increasing your overall job security.
One of the less-appreciated values of IT Certification is the experience itself. Studying for the SCJP exam is a very structured way to learn about the Java language, which is quite different from the day-to-day experience of programming for a living. Coming out of the exam, you could find that you have a more detailed understanding of how the Java language works and that, as a result, your overall Java programming skills are much improved.
Regardless of your reasons for going after certification -- whether you want the professional advantage or the personal challenge (or whether getting certified is a job requirement) -- your approach to the task will determine the success of its outcome. Good preparation, attention to detail, and a positive attitude are essential if you want to pass the SCJP exam.
For a free preview of the kinds of questions you might encounter in taking the SCJP certification exam, see the sidebar "Sample questions from the Whizlabs Java Certification (SCJP 1.6) Exam Simulator." To follow up on the many study aids recommended in this article, see the Resources section. Regardless of how you choose to prepare for your first Java Certification exam, I sincerely hope the suggestions in this article will be helpful to you, and I wish you the best of luck in your exam.
- Khalid Mughal and Rolf Rasmussen's A Programmer's Guide to Java Certification (Addison Wesley, 1999) is a great reference if you're seeking a structured learning format.
- Updated in July 2002, Simon Roberts and Philip Heller's Complete Java 2 Certification Study Guide (Sybex, 2002) offers rigorous sample questions you can answer in your own time.
- William Brogden's Java 2 Exam Prep and Java 2 Exam Cram are both excellent books. Previously published by Coriolis Group, the series is being relaunched by Que Publishing. Exam Cram is a quick review, whereas the older Exam Prep is a fairly comprehensive introduction to Java language fundamentals.
- Sun Microsystems's J2SE 1.2 and J2SE 1.6 API specs are essential reading for the SCJP exam.
- The Collections Tutorial from Sun Microsystems is helpful if you need to brush up on the Java Collections API.
- The Assertions Study Guide, also from Sun, is recommended reading before you take the new SCJP 1.6 exam.
- In his monthly developerWorks column Magic with Merlin, John Zukowski covers new features of JDK 1.6 including one installment on working with assertions (February 2001).
- "Understand the mechanics of Java's new assertion facility" ( JavaWorld , November 2001) is a two-part introduction to how assertions work and how to use them in your Java development practice.
- You can learn quite a lot about the hashCode() and equals() methods by reading Chapter 3 of Effective Java (PDF), available online courtesy of Sun Microsystems.
- See the developerWorks Java technology tutorials index for a complete listing of free tutorials.
- You can also find hundreds of articles about every aspect of Java programming in the developerWorks Java technology zone.
- While it doesn't have all the features of some commercial offerings, jEdit is a good free and open source Java IDE.
- Whizlabs Software specializes in IT certification simulators, including the Whizlabs Java Certification (SCJP 1.6) Exam Simulator for J2SE 1.6.
- Whizlabs Software also offers instructor-led, online training for Java Certification (SCJP 1.6).
- Test yourself with the free sample exam in Chapter 6 of The Complete Java 2 Certification Study Guide, excerpted on java.sun.com.
- Marcus Green is a well-regarded Java certification guru. His Java certification site is home to an SCJP tutorial, free mock examinations, a certification discussion forum, and information about his Java certification training courses.
- JavaRanch ("a friendly place for Java greenhorns") hosts a community discussion forum and the SCJP rules roundup, a free certification mock exam.
- William Brogden's home page is a nice repository of Java certification information and resources.
- The IBM Education site is a good place to start if you're looking for personalized Java training.
- The IBM professional certifications site lists the available certification programs, categorized by brand.
- List of other Books for Java certifications
About the Author
Raj Sharma is working with Whizlabs Software, an e-learning company focusing on the development of IT Certification test simulators and enterprise skill assessment system. You can reach him at