×

java 异常处理

java 异常处理(Java中出现异常如何进行处理,其中代码执行的步骤是什么)

admin admin 发表于2023-03-10 15:34:09 浏览45 评论0

抢沙发发表评论

本文目录

Java中出现异常如何进行处理,其中代码执行的步骤是什么


比如一个异常,在当前类你不希望处理它,而想让调用他的类处理,那么就throw这个异常
如果想在当前类处理,则try
catch这个异常
若是throw的话,则发现异常直接抛回给上层,执行顺序是:抛出异常、上层处理
若try
catch的话
try{
new
Exception();
}catch(Exception
ex){
这里处理异常
}
如果有finally块的话
执行顺序为:
try、catch、finally
finally无论是否有异常都将执行。

如何处理 Java 中出现的异常


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异常处理常见方式有什么


有两种,一种是向上抛,另一种是处理它
throws,用在定义方法上,后面加抛出的异常,例如
public static void main() throws Exception{}
另一种就是捕获并解决它,try...catch(finally)
定义在方法体中,例如
try{可能抛异常的语句....}catch(捕获的异常){如果抛出了异常干什么}
catch可以多写

JAVA语言中,异常处理有哪几种方式


有两中方式:1.捕获异常,自己处理.
2.throw出去,让别人处理.
举个例子:
public class A{
try{
可能放生异常的语句...
}catch(Exception e){
e.getMessage();//自己处理
}
}
public class A throws Exception{
可能放生异常的语句...
}//throw出去,让别人处理
注意这里用的是throws
如果在方法里面则用throw
举例:
public class A{
try{
可能放生异常的语句...
}catch(Exception e){
e.getMessage();//自己处理
throw new Exception (““);
}
}

详细描述java是如何处理异常的


当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用...)时,JAVA就会用异常对象来描述。
  JAVA中用2种方法处理异常:
  1.在发生异常的地方直接处理;
  2.将异常抛给调用者,让调用者处理。
  JAVA异常可分为3种:
  (1)检查性异常:java.lang.Exception
  (2)运行期异常:java.lang.RuntimeException
  (3)错误:java.lang.Error
  顶层是java.lang.Throwable类,检查性异常,运行期异常,错误都是这个类的子孙类。
  java.lang.Exception和java.lang.Error继承自java.lang.Throwable,而java.lang.RuntimeException继承自java.lang.Exception.
  检查性异常------程序正确,但因为外在的环境条件不满足引发。例如:用户错误及I/O问题----程序试图打开一个并不存在的远程Socket端口。这不是程序本身的逻辑错误,而很可能是远程机器名字错误(用户拼写错误)。对商用软件系统,程序开发者必须考虑并处理这个问题。JAVA编译器强制要求处理这类异常,如果不捕获这类异常,程序将不能被编译。
  运行期异常------这意味着程序存在bug,如数组越界,0被除,入参不满足规范.....这类异常需要更改程序来避免,JAVA编译器强制要求处理这类异常。
  错误------一般很少见,也很难通过程序解决。它可能源于程序的bug,但一般更可能源于环境问题,如内存耗尽。错误在程序中无须处理,而有运行环境处理。
  如何处理异常?
  1.try...catch
  程序运行产生异常时,将从异常发生点中断程序并向外抛出异常信息。
  Java代码
  int x = (int)(Math.random()*5);
  int y = (int)(Math.random()*10);
  int z =new int;
  try
  {
  System.out.println(“y/x=“+(y/x));
  System.out.println(“y=“+y+“z[y]=“+z[y]);
  }
  catch (ArithmeticException exc1)
  {
  System.out.println(“算术运算异常:“+exc1.getMessage());
  }
  catch (ArrayIndexOutOfBoundsException exc2)
  {
  System.out.println(“数据越界异常:“+exc2.getMessage());
  }
  说明:ArithmeticException和ArrayIndexOutOfBoundsException都属运行期异常:java.lang.RuntimeException,如果不用try...catch捕获,程序也是可通过编译的,但如果属于检查性异常:java.lang.Exception,必须而且一定要用try...catch...对其进行处理。
  2.finally
  如果把finally块置try...catch...语句后,finally块一般都会得到执行,它相当于一个万能的保险,即使前面的try块发生异常,而又没有对应异常的catch块,finally块将马上执行。
  以下情形,finally块将不会被执行:
  (1)finally块中发生了异常;
  (2)程序所在线程死亡;
  (3)在前面的代码中用了System.exit();
  (4)关闭CPU。
  3.多个异常的处理规则:
  定义多个catch可精确地定位异常。如果为子类的异常定义了特殊的catch块,而父类的异常则放在另外一个catch块中,此时,必须满足以下规则:子类异常的处理块必须在父类异常处理块的前面,否则会发生编译错误。所以,越特殊的异常越在前面处理,越普遍的异常越在后面处理。这类似于制订防火墙的规则次序:较特殊的规则在前,较普通的规则在后。
  自己也可以定义并抛出异常,方法是2步:创建异常,抛出异常(首先实例化一个异常对象,然后用thow抛出)合在一起就是----
  thow new IOException(“异常说明信息“)。将创建异常,抛出异常合在一起的好处是:创建异常时,会包含异常创建处的行信息,异常被捕获时可以通过堆栈迹(stack Trace)的形式报告这些信息。如果在同一行代码创建和抛出异常,对于程序的调试将非常有用。
  所以,thow new XXX()已经成为一个标准的异常抛出范式。
  在定义一个方法时,方法块中调用的方法可能会抛出异常,可用上面的thow new XXX()处理,如果不处理,那么必须在方法定义时,用thows声明这个方法会抛出的异常。
  对异常的处理,有一条行之有效的默认规则:向上抛出-----被调用类在运行过程中对遇到的异常一概不作处理,而是直接向上抛出,一直到最上层的调用类,调用类根据应用系统的需求和特定的异常处理规则进行处理,如向控制台输出异常堆栈信息,打印在日志文件中。用一句形象的话来说,就是谁使用,谁(最上层的调用类)处理。

JAVA语言如何进行异常处理


Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。 用try来指定一块预防所有异常的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的异常的类型。 throw语句用来明确地抛出一个异常。 throws用来标明一个成员函数可能抛出的各种异常。 可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,异常的框架就放到堆栈上面,直到所有的try语句都完成。

Java是怎样处理异常问题的


第一:try{}catch{}捕捉异常处理。
try语句里面实现的是主事件流,而catch里面实现的是异常流。
自定义大量的Exception类,只是代表非主事件流的发生的,用来进行那些分支流程的流程控制的。
在异常捕获后返回一个变量,该变量参与正常的业务流程。
第二:业务层处理业务时抛出异常,下次处理。(会影响性能)
返回变量是一种做法;抛出异常是一种做法。
而不是两者都用,返回变量是面向过程的编程方法;抛出异常更OO。

java异常处理存在的意义是什么


对于代码执行过程中,产生的异常。如果不捕获处理,程序代码默认会抛给调用层,如果调用层也未对异常做处理,那么这个异常会一直往外抛出去,有可能直接将这些信息展现给使用的用户。使用的用户看到这些信息根本无法理解出现了什么错误,很有可能会误以为系统崩溃。
在代码中做异常处理,可以保证程序运行时,如果产生异常,可以将底层的异常信息捕获到,转换为用户可以接受,或者能看懂的信息,比如说:当前处理有错误。等等这类用户可以理解的信息,而不是程序开发的代码底层信息。这样使用的用户可以根据提示重新操作。
Java代码中,有些类型转换、数据库连接、文件读取等等操作,异常发生时,不会导致系统崩溃,但有必要让操作用户按照正常流程来操作,通过异常处理来反馈给操作用户。
以上,就是我自己在Java开发过程中,自己的理解和总结,如果有误,还望多多谅解,多多包含。