9/7/2016

Exceptions and Libraries

RS 9.3, 6.4

Some slides created by Marty Stepp http://www.cs.washington.edu/143/ Edited by Sarah Heckman

CSC216: Programming Concepts – © NC State CSC216 Faculty 1

Exceptions • exception: An object representing an error or unusual condition. – unchecked exceptions: One that does not have to be handled for the program to compile – checked exception: One that must be handled for the program to compile.

• What are some unchecked and checked exceptions? • What may cause unchecked or checked exceptions?

• For any checked exception, you must either: –also throw that exception yourself – catch (handle) the exception

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 2

1 9/7/2016

Throwing an exception

public type name(params) throws type {

• throws clause: Keywords on a method's header that states that the method may generate an exception. – You only need to list the checked exceptions for compilation – Good form to list all exceptions (including unchecked exceptions) –Example: public class ReadFile { public static void main(String[] args) throws FileNotFoundException { }

"I hereby announce that this method might throw an exception, and the caller must accept the consequences if it happens."

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 3

Catching an exception try { statement(s); } catch (ExceptionType name) { code to handle the exception } – The try code executes – at least one statement should potentially cause an exception • A method call that throws an exception – If the exception occurs • The rest of the try block is skipped • Control switches the first catch block whose exception type matches • The statements in the catch block are executed • Remaining catch blocks are skipped – If no exception occurs, then all catch blocks are skipped

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 4

2 9/7/2016

Catching Multiple Exceptions

• If a try block could throw many exceptions, each exception can (and should?) be handled separately with multiple catch blocks – An exception is caught at the first catch block whose type matches – Exception type could match via an ancestor or parent class – Typically, catch most specific exceptions first and then move to general or parent classes try { } catch (ExceptionType1 name) { } catch (ExceptionType2 name) { } catch (ExceptionType3 name) { }

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 5

Multi-catch

• Java 1.7 and Later • For two specific Exceptions that have common functionality try { //Code that will cause multiple Exceptions } catch (ExceptionType1 | ExceptionType2 e) { //Common exception code }

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 6

3 9/7/2016

Finally Blocks

• Try/catch blocks can also have a corresponding finally block • If any code in the try block is executed then the code in the finally block is guaranteed to be executed – even if the exception occurs • Used to clean up resources an reduce code duplication: – Close file streams – Close database streams

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 7

Example Finally Block public int readFile(File f) { Scanner fileScanner = null; int sum = 0; try { fileScanner = new Scanner(f); while (fileScanner.hasNextLine()) { sum += fileScanner.nextInt(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (InputMismatchException e) { e.printStackTrace(); } finally { if (fileScanner != null) { fileScanner.close(); } return sum; } } CSC216: Programming Concepts –Java © NC State CSC216 Faculty 8

4 9/7/2016

Try-with-Resources

• Java 1.7 and greater • Declares one or more resources that must be closed – Implements AutoCloseable static String readFirstLineFromFile(String path) throws IOException { try (BufferedReader br = new BufferedReader(new FileReader(path))) { return br.readLine(); } }

Example from: http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 9

Dealing with an exception • All exception objects have these methods:

Method Description public String getMessage() text describing the error public String toString() a stack trace of the line numbers where error occurred public InputStream openStream() opens a stream for reading data throws IOException from the document at this URL getCause, getStackTrace, other methods printStackTrace • Some reasonable ways to handle an exception: – try again; re-prompt user; print a nice error message; quit the program; do nothing (!)

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 10

5 9/7/2016

Exception inheritance • All exceptions extend from a common superclass Exception

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 11

Inheritance and exceptions • You can catch a general exception to handle any subclass: try { Scanner input = new Scanner(new File("foo")); System.out.println(input.nextLine()); } catch (Exception e) { System.out.println("File was not found."); } • Similarly, you can state that a method throws any exception: public static void foo() throws Exception { ... – Are there any disadvantages of doing so?

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 12

6 9/7/2016

Exceptions and errors • There are also Errors, which represent serious Java problems. – Error and Exception have common superclass Throwable. – You can catch an Error (but you probably shouldn't)

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 13

Custom Exceptions

• You can create your own exceptions by extending Exception or any of its child classes – If you want an unchecked exception, extend RuntimeException • Why would we want to do this? public class MyException extends Exception { public MyException(String message) { super(message); } public MyException() { super(“Exception message”); } }

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 14

7 9/7/2016

Using Custom Exceptions

• You use your custom exception (or any in the Java API) by throwing it. • Code calling your method must either – Pass the exception on – throws clause – Catch the exception and handle public void myMethod() throws MyException { if () { throw new MyException(“My new error message”); } }

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 15

Libraries

• A library is a 3rd party collection of code that can be used in other programs – Promotes code reuse – Don’t need to “reinvent the wheel” to complete common tasks – Example: Java API – Example: JUnit

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 16

8 9/7/2016

Using Libraries

• Download the Library • Install the Library – An executable (Java Libraries) – A jar executable to download rest of library (JAXB) – A jar file (JUnit, Apache libraries, etc.) • Include Library on path when compiling and executing your application

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 17

Classpaths

• The path(s) where Java looks for libraries (i.e., referenced code) when compiling and running a program • Use the –cp argument to the java command • Separate directories/jars with a semi-colon (;) • Each jar should be listed individually – You cannot specify a directory of jars • Alternatively, you can update the System’s PATH environment variable – Make sure you restart your terminal so the new path will be available

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 18

9 9/7/2016

Using Libraries on the Command Line

• Command to compile and run – Assumption is that the project is set up in directory structure like project eos% javac -d bin -sourcepath src -sourcepath test -cp path1;path2;path3 src/pack/age1/*.java src/pack/age2/*.java test/pack/age2/*.java eos% java -cp ./bin;path1;path2;path3 pack.age1.ClassName

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 19

Creating a User Library in Eclipse

• Right-click on your project, select Build Path > Configure Build Path • Select Add Library … > User Library > User Libraries…. • Select New and give your library a name. You do NOT need to add your library to the system path – But if you do add it to the system path, you can use it from the command line • Select your library and press the Add Jars button. Brows your file system and select the *.jar files appropriate for your library. Press OK. Press Finish. Press OK.

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 20

10 9/7/2016

Creating a User Library in Eclipse (2)

• If working with a partner, you should agree on a library name (case matters) • Each partner will create a local version of the library that points to the jar(s) on their system • The project must have the library name associated with it • If there are build path errors, the project icon will be highlighted with a big red explanation point!

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 21

Other Library Setups

• Some projects store all relevant *.jar files in a lib/ directory – Jars are added to lib in file system – In Eclipse, select the Add Jar option and add the jar(s) • Building applications, like Maven, will download the required jar(s) from online repositories • Building applications, like Ant and Maven, simplify compilation and running when using the command line rather than an IDE

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 22

11 9/7/2016

APIs

• API: Application Programming Interface – Series of webpages – Describe the public classes, interfaces, and methods of Java class libraries – Describe what functionality is available for you, the client, of the libraries to use • Example of abstraction – API tells you what a class can do, but doesn’t tell you how the class does it

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 23

API Layout

• Packages: Upper left • Classes: Lower left • Details: Main frame – List of packages and descriptions – List of classes and descriptions – List of class members and descriptions • Inheritance hierarchy • Public fields and constants • Constructors • Methods

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 24

12 9/7/2016

Creating Our Own • Sometimes we’re the client of a library – Java API –3rd Party Libraries – JFreeChart, JUnit, JAXB, etc. • Sometimes we’re writing code that others will use – Need to provide an API for those clients • Sometimes we’re working with a large team and other members of the team may need to know what we’re doing – Need to provide high level details

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 25

Javadoc • comments are used to generate API pages • Javadoc comments are processed by a doclet – A Doclet is a Java program that generates documentation with a standard format from comments in your source code. • Command to create Javadoc % javadoc [comma-separated list of source files]

• See CSC Style Guidelines for directions on how to Javadoc your code • Eclipse will write a lot of Javadoc for you • All classes, methods, and fields MUST be Javadoced for projects – This includes test classes and methods! – You will also generate Javadoc and submit that with your zipped Eclipse project to Moodle!

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 26

13 9/7/2016

Javadoc Comments

• Start with /** and end with */ – There are 2 *s after the initial /

• Javadoc comments are placed immediately before whatever they are commenting – No additional new lines! • Javadoc tags start with @ and specify additional information about code that is handled in a specific way

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 27

Javadoc – Class Level import java.util.Scanner;

/** * A description of what the class * does. The more detailed the * better * @author Author Name * @version 1.0 */ public class MyClass { … }

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 28

14 9/7/2016

Javadoc – Method Level

/** * Describe what the method does * at the top. If it returns * something, start with “Returns * …”. * @param paramName1 param desc. * @param paramName2 param desc. * @return description of return */ public myMethod( paramName1, paramName2) { … }

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 29

Javadoc – Instance Fields public class MyClass { /** Describe field */ private myField; /** * Describe field */ private myField2; … }

CSC216: Programming Concepts –Java © NC State CSC216 Faculty 30

15