标签:blog int 输出 nbsp color java output catch 构造
通过例子来理解:
package exception; public class ExceptionCatch { private String s = null; public static void main(String[] args) { ExceptionCatch ec = new ExceptionCatch(); try { ec.s.toString(); }catch(Exception e) { System.out.println("Caught exception: "+e); } } } // Output: Caught exception: java.lang.NullPointerException
1 package exception; 2 3 //注意观察两个异常类构造器的区别。
/**
* 推断:
* 第一个异常类是自己定义了一个String变量,在构造的时候是将信息传给了这个变量;
* 而第二个异常类的构造器是覆盖了父类的构造方法,所以我们猜测,父类Exception里一定有一个String类型的成员变量(这个成员变量同样继承给了MyException子类),
* 所以在构造的时候利用super()将父类的构造方法取过来,进而将信息传给了父类里的那个String成员变量。
* 而getMessage()方法也是从父类那里继承来的,进而我们推断:getMessage()方法返回的正是那个String变量。
* 在第一个异常类的那个从父类继承的String变量并没有被赋值,所以通过getMessage()取到的是null。
*/
4 class MyException extends Exception { 5 String msg; 6 public MyException(String msg) { 7 this.msg = msg; 8 } 9 public void printMsg() { 10 System.out.println("msg = " + msg); 11 } 12 } 13 14 class MyException2 extends Exception { 15 public MyException2(String s) { 16 super(s); 17 } 18 } 19 20 public class E04_ExceptionClass { 21 public static void main(String args[]) { 22 try { 23 throw new MyException("MyException message"); 24 } catch(MyException e) { 25 e.printMsg(); 26 System.out.println("e.getMessage() = " + e.getMessage()); //输出为null。 27 } 28 29 try { 30 throw new MyException2("MyException2 message"); 31 } catch(MyException2 e) { 32 System.out.println("e.getMessage() = " + e.getMessage()); 33 } 34 } 35 } 36 /*Output:msg = MyException message 37 * e.getMessage() = null 38 * e.getMessage() = MyException2 message 39 */
一个方法里如果会抛出异常,则必须在其方法后面声明 throws 异常名 。如果不声明则必须在这个方法里通过 try{}catch{} 将异常处理掉。
一个方法可以声明多个异常抛出 throws 异常1 , 异常2 ,但是在以后调用该方法时必须有多个catch来捕捉不同的异常。温馨提示:往往在编程时,会把所有可能会有的异常(现在会有的和以后可能会有的)全都声明在方法之后,这是一种习惯。因为在后期在对该方法进行功能扩展时可能会遇到出现这些异常,而当时在声明这些异常之后编译器会提示你将这些异常一一catch,所以这时你只需要填补catch里的处理内容,这会来带一定的便利。
下面是一个示例:
package exception; class OpenException extends Throwable {} class CloseException extends Throwable {} public class c { public static int open() { return -1; } public static void readFile() throws OpenException,CloseException { if(open() == -1) throw new OpenException(); } public static void main(String[] args) { try { readFile(); } catch (OpenException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (CloseException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
标签:blog int 输出 nbsp color java output catch 构造
原文地址:http://www.cnblogs.com/xingyazhao/p/5985817.html