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异常详解

时间: 2024-07-31 14:23:13

java异常详解的相关文章

黑马程序员-Java异常详解

--Java培训.Android培训.iOS培训..Net培训.期待与您交流! --- 异常的介绍 Java中的异常就是那些会阻碍当前程序运行,使程序执行可能失败的一些可能情况,如程序中出现除零错误,数组下标越界等.异常在Java中被封装成了一个类,继承自Throwable,名为Exception,它有很多子类,分别描述了系统中很多常见的异常情况,这些异常机制的出现使得编写程序时对一些问题的处理变得尤为方便,下面是一些简单的使用情况. 异常捕获的一般格式 /** * javac Exceptio

java笔记--异常详解与处理

一.异常概念 Throwable类是Java中所有错误或异常的超类. 1.只有当对象是此类(或其子类)的实例时,才能通过Java虚拟机或着Java throw语句抛出.     2.只有此类或其子类才可以是catch字句中的参数类型.     3.有两个直接子类:Error和Exception         Error--指应用程序不应该去处理捕获的一种严重问题,常表示系统级的错误,如内存溢出        Exception--指程序需要捕获,需要处理的异常,是一种设计或实现方面的问题.  

Java虚拟机详解——JVM常见问题总结

[正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考之前的系列文章,尤其是那篇:Java虚拟机详解04--GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾回收.类加载机制. 先把本文的目录画一个思维导图:(图的源文件在本文末尾) 一.Java引用的四种状态: 强引用:  用的最广.我们平时写代码时,new一个Object存放在堆内存,然后用一个引用指向它,这就是强引用. * 如果一个对象具有强引用,那垃圾回收器绝不会回收它*.当内存空间不足,Java虚拟机宁

java多线程详解

转自:线程间通信.等待唤醒机制.生产者消费者问题(Lock,Condition).停止线程和守护线程.线程优先级 1  线程间通信 1.1  线程间通信 其实就是多个线程在操作同一个资源,但是操作的动作不同. 比如一个线程给一个变量赋值,而另一个线程打印这个变量. 1.2  等待唤醒机制 wait():将线程等待,释放了CPU执行权,同时将线程对象存储到线程池中. notify():唤醒线程池中一个等待的线程,若线程池有多个等待的线程,则任意唤醒一个. notifyAll():唤醒线程池中,所有

JAVA: httpclient 详解;

相对于httpurlconnection ,httpclient更加丰富,也更加强大,其中apache有两个项目都是httpclient,一个是commonts包下的,这个是通用的,更专业的是org.apache.http.包下的,所以我一般用后者: httpclient可以处理长连接,保存会话,重连接,以及请求过滤器,连接重用等等... 下面是测试代码(全部总结来自官方文档,以及翻译) 须要下载核心包:httpclient-4.3.4.jar ,也可在官网下载:http://hc.apache

java反射详解 (转至 http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html)

本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象获得完整的包名和类名 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package Reflect; /**  * 通过一个对象获得完整的包名和类名  * */ class Demo{     //other codes... } class hello{     pu

java关键字详解

Java关键字及其作用 目录 Java关键字及其作用--- 1 一.     关键字总览:2 二.     详细解释--- 3 1.访问控制--- 3 1)私有的-- 3      private 2)受保护的-- 3      protected 3)公共的-- 3      public 2.类.方法和变量修饰符--- 3 1)声明抽象-- 3      abstract 2)类-- 4      class 3)继承.扩展-- 4      extends 4)最终.不可改变-- 4   

Java泛型详解(转)

文章转自  importNew:Java 泛型详解 引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除. 泛型基础 泛型类 我们首先定义一个简单的Box类: public class Box { private String object; public void set(String object) { this.object = object; } public Stri

(转)Java ClassLoader详解

转:http://java.chinaitlab.com/base/804400.html 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的.Java Applet 需要从远程下载 Java 类文件到浏览器中并执行.现在类加载器在 Web 容器和 OSGi 中得到了广泛的使用.一般来说,Java 应用的开发人