java编译异常有哪几个
1.检查型异常,这样的异常继承于Excetpion,就是在编译期间需要检查,如果该异常被throw,那么在该异常所在的method后必须显示的throws,调用该method的地方也必须捕获该异常,否则编译器会抛出异常.ejb里的RemoteException是一个这样的异常.来源:考试大
2.运行时异常,就是在运行期间系统出现的异常,该类异常继承于RuntimeException,该类异常在编译时系统不进行检查,如NullPointerExcetpion,NumberFormatException.
3.系统错误,一般是JVM出现异常时抛出的异常,如OutofMemoryError,这样的异常在J2EE开发中是不用关心的.考试大论坛
在J2EE开发中,检查型异常被滥用以至于过一段时间程序员自己都看不懂抛出这样的异常,.里面封装的这些错误信息是干什么用的,更可怕的是有好多有用的信息找不到了.比如SQLException和RemoteException这样的异常我们没必要再进行封装,这样的异常只对我们调试程序有用,而对客户来说它就是一个”系统错误”而已.异常处理有一个简单的原则,你什么时候需要封装自己的检查型异常?就是你很清楚自己抛出这个异常的用途时,比如用户输入用户名和密码要登录,但用户名和密码不匹配,你就要定义一个检查型异常,客户端通过捕获该异常,然后把相应的错误信息反馈给客户.而其它的自己未预期的错误或者异常比如SQLException,只需封装到EJBException中,ejb container会把它的信息追加到RemoteException里,这样客户端捕获RemoteException后把它写到系统日志里,就很容易进行调试。
Java 异常的处理
在 Java 应用程序中,对异常的处理有两种方式:处理异常和声明异常。
处理异常:try、catch 和 finally
若要捕获异常,则必须在代码中添加异常处理器块。这种 Java 结构可能包含 3 个部分,
都有 Java 关键字。下面的例子中使用了 try-catch-finally 代码结构。
import java.io.*; public class EchoInputTryCatchFinally { public static void main(String args[]){ System.out.println(”Enter text to echo:”); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader inputReader = new BufferedReader(isr); try{ String inputLine = inputReader.readLine(); System.out.println(”Read:” + inputLine); } catch(IOException exc){ System.out.println(”Exception encountered: ” + exc); } finally{ System.out.println(”End. “); } } 其中:
try 块:将一个或者多个语句放入 try 时,则表示这些语句可能抛出异常。编译器知道可能要发生异常,于是用一个特殊结构评估块内所有语句。
catch 块:当问题出现时,一种选择是定义代码块来处理问题,catch 块的目的便在于此。catch 块是 try 块所产生异常的接收者。基本原理是:一旦生成异常,则 try 块的执行中止,JVM 将查找相应的 JVM。
finally 块:还可以定义 finally 块,无论运行 try 块代码的结果如何,该块里面的代码一定运行。在常见的所有环境中,finally 块都将运行。无论 try 块是否运行完,无论是否产生异常,也无论是否在 catch 块中得到处理,finally 块都将执行。
try-catch-finally 规则:
必须在 try 之后添加 catch 或 finally 块。try 块后可同时接 catch 和 finally 块,但至少有一个块。
必须遵循块顺序:若代码同时使用 catch 和 finally 块,则必须将 catch 块放在 try 块之后。
catch 块与相应的异常类的类型相关。
一个 try 块可能有多个 catch 块。若如此,则执行第一个匹配块。
可嵌套 try-catch-finally 结构。
在 try-catch-finally 结构中,可重新抛出异常。
除了下列情况,总将执行 finally 做为结束:JVM 过早终止(调用 System.exit(int));在 finally 块中抛出一个未处理的异常;计算机断电、失火、或遭遇病毒攻击。
声明异常
若要声明异常,则必须将其添加到方法签名块的结束位置。下面是一个实例:
public void errorProneMethod(int input) throws java.io.IOException { //Code for the method,including one or more method //calls that may produce an IOException } 这样,声明的异常将传给方法调用者,而且也通知了编译器:该方法的任何调用者必须遵守处理或声明规则。声明异常的规则如下:
必须声明方法可抛出的任何可检测异常(checked exception)。
非检测性异常(unchecked exception)不是必须的,可声明,也可不声明。
调用方法必须遵循任何可检测异常的处理和声明规则。若覆盖一个方法,则不能声明与覆盖方法不同的异常。声明的任何异常必须是被覆盖方法所声明异常的同类或子类。
转:
1. java.lang.nullpointerexception
这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化,依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)
2. java.lang.classnotfoundexception
这个异常是很多原本在jb等开发环境中开发的程序员,把jb下的程序包放在wtk下编译经常出现的问题,异常的解释是"指定的类不存在",这里主要考虑一下类的名称和路径是否正确即可,如果是在jb下做的程序包,一般都是默认加上package的,所以转到wtk下后要注意把package的路径加上。
3. java.lang.arithmeticexception
这个异常的解释是"数学运算异常",比如程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。
4. java.lang.arrayindexoutofboundsexception
这个异常相信很多朋友也经常遇到过,异常的解释是"数组下标越界",现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。
5. java.lang.illegalargumentexception
这个异常的解释是"方法的参数错误",很多j2me的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写成负数就会出现这个异常,再比如g.setcolor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。
6. java.lang.illegalaccessexception
这个异常的解释是"没有访问权限",当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了package的情况下要注意这个异常。
其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。关于异常的全部说明,在api里都可以查阅。
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
方法未找到异常:NoSuchMethodException
java.lang.AbstractMethodError
抽象方法错误。当应用试图调用抽象方法时抛出。
java.lang.AssertionError
断言错。用来指示一个断言失败的情况。
java.lang.ClassCircularityError
类循环依赖错误。在初始化一个类时,若检测到类之间循环依赖则抛出该异常。
java.lang.ClassFormatError
类格式错误。当Java虚拟机试图从一个文件中读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。
java.lang.Error
错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。
java.lang.ExceptionInInitializerError
初始化程序错误。当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段。
java.lang.IllegalAccessError
违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。
java.lang.IncompatibleClassChangeError
不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。
java.lang.InstantiationError
实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.
java.lang.InternalError
内部错误。用于指示Java虚拟机发生了内部错误。
java.lang.LinkageError
链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。
java.lang.NoClassDefFoundError
未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。
java.lang.NoSuchFieldError
域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义中没有该域的定义时抛出该错误。
java.lang.NoSuchMethodError
方法不存在错误。当应用试图调用某类的某个方法,而该类的定义中没有该方法的定义时抛出该错误。
java.lang.OutOfMemoryError
内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。
java.lang.StackOverflowError
堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。
java.lang.ThreadDeath
线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。
java.lang.UnknownError
未知错误。用于指示Java虚拟机发生了未知严重错误的情况。
java.lang.UnsatisfiedLinkError
未满足的链接错误。当Java虚拟机未找到某个类的声明为native方法的本机语言定义时抛出。
java.lang.UnsupportedClassVersionError
不支持的类版本错误。当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java虚拟机支持的时候,抛出该错误。
java.lang.VerifyError
验证错误。当验证器检测到某个类文件中存在内部不兼容或者安全问题时抛出该错误。
java.lang.VirtualMachineError
虚拟机错误。用于指示虚拟机被破坏或者继续执行操作所需的资源不足的情况。
java.lang.ArithmeticException
算术条件异常。譬如:整数除零等。
java.lang.ArrayIndexOutOfBoundsException
数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
java.lang.ArrayStoreException
数组存储异常。当向数组中存放非数组声明类型对象时抛出。
java.lang.ClassCastException
类造型异常。假设有类A和B(A不是B的父类或子类),O是A的实例,那么当强制将O构造为类B的实例时抛出该异常。该异常经常被称为强制类型转换异常。
java.lang.ClassNotFoundException
找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。
java.lang.CloneNotSupportedException
不支持克隆异常。当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。
java.lang.EnumConstantNotPresentException
枚举常量不存在异常。当应用试图通过名称和枚举类型访问一个枚举对象,但该枚举对象并不包含常量时,抛出该异常。
java.lang.Exception
根异常。用以描述应用程序希望捕获的情况。
java.lang.IllegalAccessException
违法的访问异常。当应用试图通过反射方式创建某个类的实例、访问该类属性、调用该类方法,而当时又无法访问类的、属性的、方法的或构造方法的定义时抛出该异常。
java.lang.IllegalMonitorStateException
违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。
java.lang.IllegalStateException
违法的状态异常。当在Java环境和应用尚未处于某个方法的合法调用状态,而调用了该方法时,抛出该异常。
java.lang.IllegalThreadStateException
违法的线程状态异常。当县城尚未处于某个方法的合法调用状态,而调用了该方法时,抛出异常。
java.lang.IndexOutOfBoundsException
索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。
java.lang.InstantiationException
实例化异常。当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常。
java.lang.InterruptedException
被中止异常。当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常。
java.lang.NegativeArraySizeException
数组大小为负值异常。当使用负数大小值创建数组时抛出该异常。
java.lang.NoSuchFieldException
属性不存在异常。当访问某个类的不存在的属性时抛出该异常。
java.lang.NoSuchMethodException
方法不存在异常。当访问某个类的不存在的方法时抛出该异常。
java.lang.NullPointerException
空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。
java.lang.NumberFormatException
数字格式异常。当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。
java.lang.RuntimeException
运行时异常。是所有Java虚拟机正常操作期间可以被抛出的异常的父类。
java.lang.SecurityException
安全异常。由安全管理器抛出,用于指示违反安全情况的异常。
java.lang.StringIndexOutOfBoundsException
字符串索引越界异常。当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常。
java.lang.TypeNotPresentException
类型不存在异常。当应用试图
Java提供了两类主要的异常:RuntimeException和CheckedException.
checked 异常也就是我们经常遇到的IO异常,以及SQL异常都是这种异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。
runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。
不管是不是RuntimeException 只要有异常 而且你还没try / catch 那他一定会中断执行 非RuntimeException 在编译的时候 编译器会帮你检查 有没有正确、完整的try / catch 如果没有 编译不过 RuntimeException 在编译的时候 不检查
参考自:http://m.blog.csdn.net/blog/zhou1216141078/12921609
Exception下除了RuntimeException及其子类以外的所有子类,JDK文档上说,已知道的直接子类有:
Exception下除了RuntimeException及其子类以外的所有子类
要列出来的话,那可多了
JDK文档上说,已知道的直接子类有:
相看相关API吧,给你一个中文的JDK_API
整理的资料,截个图给你看下
额太多了建议看API
Exception子类的都是编译异常!!
编译异常是要解决的要不编译通不过
运行异常(RuntimeException的子类)一般是代码不够严谨!!
java 中java.lang.IndexOutOfBoundsException一般是什么异常呢
该异常通常是指数组下标越界异常。例如:一个ArrayList数组中没有元素,而你想获取第一个元素,运行是就会报此类型的错误。案例如下:
Java回编译时出错,速求大神看看出错在哪里!
E:\\apktool>apktool b framework-res(FC) Exception in thread "main" org.yaml.snakeyaml.error.YAMLException: java.nio.char set.MalformedInputException: Input length = 1 at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader... 展开
有关Java的RuntimeException
。控制台一旦报RuntimeException,就必须要处理。。没有例外的。而且,处理RuntimeException,不是try-catch能解决的。。try-catch在这里使用毫无意义。2.不是RuntimeException,就是编译时异常,异常只有这两种了。比如你在处理文件流时的I\/O问题,就属于编译时异常。这个时候用thr{}catch 来捕获或者 ...
这个Java·项目异常怎么解决??
这个异常看起来是由于访问权限问题引起的,可能是由于模块系统的一些限制。为了解决这个问题,你可以尝试使用 `--add-opens` 选项打开相关的包,以便解决模块间的访问限制。在运行 Java 程序时,可以使用以下命令格式:```bash java --add-opens <模块\/包名>=<目标模块>=<权限> -jar YourProject.jar...
(问答题,10.0分)什么是异常?什么是致命错误?写出 Java
在计算机编程中,异常是指程序运行中出现的错误。异常可以是编译时异常,也可以是运行时异常。编译时异常是在编译程序时检测到的错误,而运行时异常是在程序运行时检测到的错误。致命错误是指导致程序无法继续运行的错误。致命错误可能是由硬件故障、操作系统故障或其他严重问题引起的。在 Java 中,异常是...
Java中异常的分类
程序出了那种异常JVM就会抛出相应的异常 比如代码:ArrayIndexOutOfBoundsException public void demo1(){ try{ int a = 10\/0;}catch(ArithmeticException ae){ System.out.println(“算术运算异常:”+ae.getMessage());}catch(Exception e){ System.out.println(“其他异常”+e.getMessage());}...
java一般异常指的是什么
Throwable类是Java语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过Java虚拟机或者Java throw语句抛出。异常通常指,你的代码可能在编译时没有错误,可是运行时会出现异常。比如常见的空指针异常。也可能是程序可能出现无法预料的异常,比如你要从一个文件读信息,可这个文件...
Java中的异常都是从那一个类继承的? 何为runtime 异常?怎样处理?
对于什么时候该使用Runtime Exception,什么时候该使用Check Exception已经有一定认识了,让我们再次回归到Exception的本质,Exception一个非常重要的作用是需要告诉调用者发生了何种错误,错误发生的地方在哪里。Java中的Exception的callstack显然非常有用。可以知道何处发生了何种错误。因此我们通常会将异常通过日志...
java异常和错误的区别
1.一个异常是在一个程序执行过程中出现的一个事件,它中断了正常指令的运行 2.错误,偏离了可接受的代码行为的一个动作或实例 异常的结构分类:1、运行时异常(未检查异常)2、编译时异常(已检查异常)在Java中异常Exception和错误Error有个共同的父类Throwable。Error Exception runtimeException几个子类 1...
java什么时候需要抛出异常
java的异常有编译时异常和运行时异常,编译时异常就是很明显的会出现异常,比如说a\/b这样的式子b=0就会出现异常,这个大家都知道,如果你用IDE开发,系统就会提醒你要抛出异常,否则不让通过,还有比如文件的输入和输出,你用字符串指定一个文件名,这个肯定也是有可能出现异常的,当你的字符串指定的文件...
麻阙泻痢: 转: 1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在创建图片,调用数组这些操作中,比如图片未经初始...
相城区13080383914: Java编程中常见的错误有哪些 - ?
麻阙泻痢: 错误就是error,它不同于异常.有时候程序不发生异常是不会出问题的,但有错误一定有问题. 常见的错误:编写错误,语句错误---这两个编译器会提醒,也就是常用的eclipse; 逻辑错误,这个要看你自己的逻辑思维了. 潜在错误,也就是编写语句逻辑都没有问题,但jvm检测有问题,就需要你自己找了,通常潜在错误都有逻辑问题.
相城区13080383914: Java编程中 常见的异常有哪几种 ???
麻阙泻痢:ArithmeticException除数为0的异常 NullPointerException空指针异常UnsupportedOperationException不支持的操作 IllegalArgumentException非法参数 IndexOutOfBoundsException索引出界 IllegalStateException非法状态 ClassCastException数据类型转换异常 NumberFormatException字符串转换为数字类型时抛出的异常 IllegalAccessException没有访问权限 java讨论交流 qq群320505897
相城区13080383914: java运行时异常有哪些 - ?
麻阙泻痢: 常见的五种异常:1、ClassCastException(类转换异常)2、IndexOutOfBoundsException(数组越界)3、NullPointerException(空指针)4、ArrayStoreException(数据存储异常,操作数组时类型不一致)5、还有IO操作的BufferOverflowException异常
相城区13080383914: 常见的java异常有哪些?都是什么意思? - ?
麻阙泻痢: 1、ArithmeticException - 算术运算中,被0除或模除.2、ArrayIndexOutOfBoundsException - 数组越界访问.3、ArrayStoreException - 数据存储异常,写数组操作时,对象或数据类型不兼容.4、ClassCastException - 类型转换异常.5、...
相城区13080383914: Java中的异常分类及区别 - ?
麻阙泻痢: Java运行时异常:由java虚拟机抛出的异常.用户不必处理. 一般异常是用户可以抛出的异常,如果抛出调用必须进行处理. 运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误.java编译器要求方法必须声明抛出可能...
相城区13080383914: java异常除了受控异常和运行时异常还有别的吗 他俩有什么区别 - ?
麻阙泻痢: 除了最后一个SQLException外都是运行时异常(RuntimeException的子类).java异常就这两种,受控异常你必须或者用try...catch...来处理,或者用throws来丢给上一层方法,否则编译时就通不过;而运行时异常你不必非要这样处理,编译时没有问题.
相城区13080383914: 急需!!java编程的普通异常(五个),并解释它们 - ?
麻阙泻痢: 空指针异常:NullPointerException 类型强制转换异常:ClassCastException数组下标越界异常:ArrayIndexOutOfBoundsException 字符串转换为数字异常:NumberFormatException找不到类异常:java.lang.ClassNotFoundException
相城区13080383914: java异常有哪些 - ?
麻阙泻痢: NullPointException null值异常 最常见 SQLException:操作数据库异常类. ClassCastException:数据类型转换异常. NumberFormatException:字符串转换为数字类型时抛出的异常.UnsupportedOperationException不支持的操作 ...
相城区13080383914: java中异常有哪些? - ?
麻阙泻痢: ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, ...