黑马程序员 异常

来源:互联网 发布:淘宝店铺 花呗 编辑:程序博客网 时间:2024/06/05 19:33

-----------android培训java培训、java学习型技术博客、期待与您交流! -----------

在写程序或者用户运行程序的时候难免会出现各种问题,比如写了一个查询系统,要求输入一个介于0到9之间的数。那么当输入其它的数据的时候,程序就会出现异常的情况。对于会出现的异常的情况,JAVA提供了对异常处理的方式:

异常

java对程序运行时出现不正常情况进行描述后的对象体现

对于严重问题,通过Error描述;

对于非严重问题通过Exception描述。并可以使用针对性的处理方式进行处理。

Throwable类是所有错误或者异常的超类:有Error和Exception两子类。异常体系中所有类建立的对象都具备可抛性。

异常的处理
java提供了特有的语句进行处理。
try
{
需要被检测的语句
}
catch
{
处理异常的代码。
}
finally
{
一定会执行的语句。
}
finally{},里面放的是一定会执行的代码,常用于关闭资源。
只有当执行到System.exit(0)时,finally不会执行。

处理方式有两种:try或者throw
如果该异常处理不了,但并不属于该功能出现的异常。可以将异常转换后,再抛出和该功能相关的异常。
对捕捉到的异常进行常见方法操作
String getMessage();
String toString();
void printStackTrace();异常名称,异常信息,异常出现的位置,这个打印的信息更全面。
常用的处理语句格式:
try{}  catch{}
try{}  catch{}  finally{}
try{}  finally{}:没有catch语句,就说明异常没有被处理,如果是抛给其它对象,需要声明异常。


对多异常的处理:
1,声明异常时,建议声明更为具体的异常,这样处理的可以更具体。

2,对方声明几个异常,就应对应几个catch块,如果多个catch块中的异常出现继承关系,父类异常块放在最下面,因为父类会把子类的异常都处理掉。

3一个try可以对应多个catch。

建议catch异常处理事不要只是简单打印一条输出语句。catch中一定要定义具体处理方式。

自定义异常: 

对于未被java所描述并封装的对象,我们可以按照java的思想对特有的问题进行自定义封装。

自定义的异常须继承Exception,因为只有Throwable体系中的类和对象才可以被抛出。自定义异常信息时,可以使用父类已经定义好的功能。
自定义异常需要手动进行抛出。
当函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。要么在内部try catch处理,要么在函数上声明让调用者处理。

throws和throw的区别
throws使用在函数上,throw使用在函数内。
throws后面接异常类,可以跟多个,用逗号隔开。throw后面跟的异常对象。


自定义异常:

class FushuException extends Exception{/*private String msg;FushuException(String msg){this.msg = msg;}public String getMessage(){return msg;}*///父类已经把异常信息操作了,只需在构造时,将异常信息传递给父类FushuException(String msg){super(msg);}}class Demo{int div(int a,int b)throws FushuException//throws作用在函数上,抛出的是异常类{if(b<0)throw new FushuException("被除数是负数");//throw作用在函数内,抛出的是异常对象。return a/b;}}class ExceptionDemo{public static void main(String[] args){Demo d = new Demo();try{int x = d.div(4,-1);System.out.println(x);}catch (FushuException e){System.out.println(e);}}}


RuntimeException():运行时异常

其与其子类比较特殊:如果在函数内抛出该异常,函数上可以不用声明。
如果在函数上声明了该异常,调用者可以不用进行处理。
因为该类异常发生,出现了无法继续运算的情况,希望程序停止,对代码进行修改。

异常在子父类覆盖中的体现:
1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。如果出现了其它的异常,只能内部处理。
2,如果父类方法抛出多个异常,那么子类在覆盖父类时,子类只能抛出异常的子集。
3,如果父类或者接口的方法中没有异常抛出,子类在覆盖方法时,也不可以抛出异常。

类似于系统文件中的文件夹,对类文件进行分类管理。给类提供多层命名空间。

1,包也是一种封装形式。
2,定义包的代码写在文件第一行。用package关键字。
3,包中类名全称是:包名.类名
4,编译文件的时候可以用(javac -d 文件存放地址 文件名)命令让系统自动建立包文件
5,当包中还有子包的时候,可以在在包名后面.包名。如:package pack.pack1.pack2.pack3

包与包之间的访问
1,类名需要全称。
2,包中的类要被访问,必须权限足够大,被访问的类和成员需要被public修饰。
不同包之间的类可以互相访问,也可以继承。
继承以后,子类可以使用被protected修饰(保护)的成员。
包与包之间可以使用的权限只有两种:public protected

为了保证包名不重复,可以使用url来命名。
使用某个包中的类,当包目录层次较多时,可以用import关键字,导入包文件,简写书写。
如:import java.io.FileReader;将java中的io包中的FileReader类导入

jar包:java的压缩包。就像windows中的rar,zip包。
命令:jar -cf 名字.jar 放入的包名

具体命令可以在dos中运行jar命令查看。


-----------android培训java培训、java学习型技术博客、期待与您交流! ------------

原创粉丝点击