1 // Example 7.1 joi/examples/RumpelStiltskinDemo.java 2 // 3 // 4 // Copyright 2003 Bill Campbell and Ethan Bolker 5 6 // Practice with simple exceptions - some from the API, one declared here. 7 8 public class RumpelStiltskinDemo 9 { 10 public static void main( String[] args ) 11 { 12 Wizard rumpelstiltskin = new Wizard("RumpelStiltskin"); 13 Wizard aNullWizard = null; 14 15 // see if the first command line argument ( args[0] ) 16 // is the right name 17 try { 18 System.out.println("Is your name " + args[0] +'?'); 19 rumpelstiltskin.guessName(args[0]); 20 System.out.println("Yes! How did you guess?"); 21 System.exit(0); 22 } 23 // come here right away if there is no args[0] 24 catch (IndexOutOfBoundsException e) { 25 System.out.println( "usage: java RumpelStiltskinDemo guess"); 26 System.exit(0); // leave the program gracefully 27 } 28 // come here from guessName if exception thrown 29 catch (BadGuessException e) { 30 System.err.println("sorry - " + args[0] + " is not my name"); 31 } 32 33 System.out.println( 34 "\nIntentionally generate a NullPointerException,\n" + 35 "see what the Exception's toString method returns"); 36 try { 37 aNullWizard.guessName("who am I?"); 38 } 39 catch (Exception e) { 40 System.out.println(e); 41 } 42 43 System.out.println( 44 "\nExperiment with the printStackTrace() method:"); 45 try { 46 rumpelstiltskin.makeMischief(); 47 } 48 catch (Exception e) { 49 e.printStackTrace(); 50 } 51 52 // perhaps throw an uncaught IndexOutOfBoundsException 53 System.out.println( 54 "\nLook for a second command line argument,\n" + 55 "see what happens if it's not there:" ); 56 System.out.println(args[1]); 57 } 58 59 // two inner classes, used only in this file 60 private static class Wizard 61 { 62 private String name; 63 64 public Wizard( String name ) 65 { 66 this.name = name; 67 } 68 69 public void guessName( String name ) 70 throws BadGuessException 71 { 72 if (!name.equals(this.name)) 73 throw new BadGuessException( ); 74 } 75 76 public void makeMischief() 77 throws BadGuessException 78 { 79 this.guessName("??"); 80 } 81 } 82 83 private static class BadGuessException extends Exception 84 { 85 // empty body 86 } 87 }