java异常详解

1.

java中throw和throws:throw用在方法内部实际抛出异常的时候;throws用在方法头部(参数后面,方法体前面)。

public class Test{
 public static void main(String[] args)  {
  try {
   f();
  } catch(NoSuchMethodException e) {
   System.out.println("test2");
  }
  //用try…catch捕获并处理之后,后面的语句可以正常执行
  System.out.println("test3");
 }
 static void f() throws NoSuchMethodException {
  throw new NoSuchMethodException();
  //在抛出异常之后,执行中断,代码块后面代码不再执行,代码块外面的可以执行如果后面还有代码编译期会报错,类似return
  //System.out.println("test1");
 }
}

2.

一个java文件中最多一个public类(可以没有public类),当然内部类可以有多个public类。main方法不能去掉public。


3.

java.lang.Throwable直接已知子类: Error, Exception ;Exception包含子类RuntimeException。


Error和RuntimeException,可以不用try…catch处理或声明抛出(当然捕获或者声明抛出也没问题);非RuntimeException的Exception必须在编译前用try…catch捕获处理或声明抛出,否则编译报错。


编译报错和Error是两回事。编译报错:代码语法不正确,就可能报错,处于编译期。例如少个分号,控制台“Test.java:6: 错误: 需要‘;‘” Error:运行期出现,不捕获或者不声明抛出,编译都可以通过,但是运行的时候会报java.lang.Error类型异常。

Error用于指示合理的应用程序不应该试图捕获的严重问题。
RuntimeException——意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免(当然也可以捕获处理,但是一般都是程序有问题,不应该通过捕获来“隐藏”程序bug)。

4.

Exception:表示一个由程序员导致的错误(非RuntimeException的Exception必须用捕获或抛给上级处理,RuntimeException一般都是编程有bug)。应该在应用程序级被处理。
Error:经常用来用于表示系统错误或低层资源的错误。如何可能的话,应该在系统级被捕捉。


5.

总结:非RuntimeException的Exception要捕获处理或者声明抛出被调用者处理,要么编译都通不过;RuntimeException要尽可能的避免(属于程序bug),编译的时候检查不到



java异常详解,布布扣,bubuko.com

java异常详解

上一篇:Swift编程语言翻译与学习——数组


下一篇:Nginx详解二十一:Nginx深度学习篇之配置苹果要求的openssl后台HTTPS服务