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 –Java © 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 (
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 Eclipse 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 APIs • 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 • 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
CSC216: Programming Concepts –Java © NC State CSC216 Faculty 29
Javadoc – Instance Fields public class MyClass { /** Describe field */ private
CSC216: Programming Concepts –Java © NC State CSC216 Faculty 30
15