【移动应用开发技术】黑马程序员-异常篇_第1页
【移动应用开发技术】黑马程序员-异常篇_第2页
【移动应用开发技术】黑马程序员-异常篇_第3页
【移动应用开发技术】黑马程序员-异常篇_第4页
【移动应用开发技术】黑马程序员-异常篇_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】黑马程序员——异常篇

android培训、java培训、期待与您交流!异常:

是什么?是对问题的描述。将问题进行对象的封装。

异常体现:Throwable|--Error|--Exception|--RuntimeException

异常体系的特点:异常体系中的所有类以及建立的对象都具备可拋性。也就是说可以被throw和throws关键字所操作。只有异常体系具备这个特点。

throw和throws的用法:

throw定义在函数内,用于抛出异对象。

throws定义在函数上,用于抛出异常类,可以抛出多个,用逗号隔开。

当函数内容有throw抛出异常对象,并未进行try处理。必须要在函数上声明,都在编译失败。

注意,RuntimeException除外。也就是说函数内如果抛出RuntimeException异常,函数上可以不用声明。

异常有两种:编译时被检测异常:该异常在编译时,如果没有处理(没有throw也没有try),编译失败。运行时异常(编译时不检测):在编译时,不需要处理,编译器不检查。该异常的发生,建议不处理,让程序停止。需要对代码进行修正。

如果函数声明了异常,调用者需要进行处理。处理方法可以throws,可以try。

异常处理语句:

try

{需要被检测的代码;

}

catch()

{处理异常的代码;

}

finally

{一定会执行的代码;

}

有三个结合格式:

1.try{}catch(){}

2.try{}catch(){}finally{}

3.try{}finally{}

注意:

1,finally中定义的通常是关闭资源代码。因为资源必须释放。

2,finally只要一种情况不会执行。当执行到System.exit(0);finally不会执行。

自定义异常:定义类继承Exception或者RuntimeException1,为了让该自定义类具备可拋性。2,让该类具备操作异常的共性方法。当要定义自定义异常的信息时,可以使用父类已经定义好的功能。将信息传递给父类构造函数。classMyExceptionextendsException{MyException(Stringmessage){super(message);}}

自定义异常:安卓java面向对象的思想,将程序中出现的特有问题进行封装。

异常的好处:1,将问题进行封装。2,将正常流程代码和问题处理代码相分离,方便于阅读。

异常的处理原则:1,处理方式有两种:try或者throws。2,调用到抛出异常的功能时,抛出几个就处理几个。一个try对应多个catch。3,多个catch,父类的catch放到最下面。4,catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句。也不要不写。

5,当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。try{thrownewAException();}catch(AExceptione){throwe;}如果该异常处理不了,但并不属于该功能出现的异常。可以将异常转换后,在抛出和该功能相关的异常。

或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去。当调用者知道,并处理。也可以将捕获异常处理后,转换新的异常。try{thrownewAException();}catch(AExceptione){//对AException处理。thrownewBException();

}

比如:汇款的例子。

异常的注意事项:

在子父类覆盖时:1,子类抛出的异常必须是父类的异常的子类或者子集。2,如果父类或者接口没有异常抛出时,子类覆盖出现异常只能try不能throw。示例:ExceptionTest.java老师用电脑上课。/*

毕老师用电脑上课。

开始思考上课中出现的问题:电脑蓝屏,电脑冒烟。

当冒烟发生后,老师不能继续讲课。出现了讲师的问题,课时计划无法完成。

思路:

定义两个类,老师和电脑。

老师有姓名,上课方法(使用电脑上课),

电脑冒烟时,讲师有无法完成课时计划的问题。

电脑有运行方法、重启方法。

考虑电脑可能出现的问题:电脑蓝屏,电脑冒烟,定义两个异常类。

*/

classLanPingExceptionextendsException

{

LanPingException(Stringmessage)

{

super(message);

}

}

classMaoYanExceptionextendsException

{

MaoYanException(Stringmessage)

{

super(message);

}

}

classNoPlanExceptionextendsException

{

NoPlanException(Stringmessage)

{

super(message);

}

}

classTeacher

{

privateStringname;

privateComputercmpt;

Teacher(Stringname)

{

=name;

cmpt=newComputer();

}

publicvoidprelect()throwsNoPlanException

{

try

{

cmpt.run();//调用抛出异常的run方法

}

catch(LanPingExceptione)

{

cmpt.reset();

}

catch(MaoYanExceptione)

{

test();

thrownewNoPlanException("课时无法继续"+e.getMessage());//处理不了,抛出异常,方法上抛出。

}

System.out.println("讲课");

}

publicvoidtest()

{

System.out.println("练习");

}

}

classComputer

{

privateintstate=3;//代表电脑的状态。

publicvoidrun()throwsLanPingException,MaoYanException

{

if(state==2)

thrownewLanPingException("蓝屏了");

if(state==3)

thrownewMaoYanException("冒烟了");

System.out.println("电脑运行");

}

publicvoidreset()

{

state=1;//电脑恢复到正常状态。

System.out.println("电脑重启");

}

}

classExceptionTest

{

publicstaticvoidmain(String[]args)

{

Teachert=newTeacher("毕老师");

try

{

t.prelect();

}

catch(NoPlanExceptione)

{

System.out.println(e.toString());

System.out.println("换老师或者放假");

}

}

}示例:ExceptionTest1.java图形面积。/*

有一个圆形和长方形。

都可以获取面积。对于面积如果出现非法数值,视为是获取面积出现问题。

问题通过一次来表示。

先要对这个程序进行基础设计。

思路:

1,定义抽象图形类(或接口),获取面积方法。

2,圆形,长方形类继承图形类。

3,对问题进行描述。

*/

classNoValueExceptionextendsRuntimeException

{

NoValueException(Stringmessage)

{

super(message);

}

}

interfaceShape

{

voidgetArea();

}

classRecimplementsShape

{

privateintlen,wid;

Rec(intlen,intwid)//throwsNoValueException

{

if(len<=0||wid<=0)

thrownewNoValueException("非法值");

this.len=len;

this.wid=wid;

}

publicvoidgetArea()

{

System.out.println(len*wid);

}

}

classCircleimplementsShape

{

publicstaticfinaldoublePI=3.14;

privateintradius;

Circle(intradius)

{

if(radius<=0)

thrownewNoValueException("非法半径");

this.radius=radius;

}

publicvoidgetArea()

{

System.out.println(radius*radius*PI);

}

}

classExceptionTest1

{

publicstaticvoidmain(String[]args)

{

/*

try

{

Recr=newRec(-3,4);

r.getArea();

}

catch(NoValueExceptione)

{

System.out.println(e.toString());

}

*/

//Recr=newRec(-3,4);

//r.getArea();

Circlec=newCircle(-3);

c.getArea();

}

}包:

定义包用package关键字。

1:对类文件进行分类管理。

2:给类文件提供多层名称空间。

如果生成的包不在当前目录下,需要最好执行classpath,将包所在父目录定义到classpath变量中即可。

一般在定义包名时,因为包的出现是为了区分重名的类。所以包名要尽量唯一。怎么保证唯一性呢?可以使用url域名来进行包名称的定义。

packagepack;//定义了一个包,名称为pack。注意:包名的写法规范:所有字母都小写。

//packagecn.itcast.pack.demo;

类的全名称是包名.类名

编译命令:javac–d位置(.当前路径)java源文件(就可以自动生成包)

包是一种封装形式,用于封装类,想要被包以外的程序访问,该类必须public;类中的成员,如果被包以外访问,也必须public;

包与包之间访问可以使用的权限有两种:

1:public

2:protected:只能是不同包中的子类可以使用的权限。java中的四种权限:

范围

public

protected

default

private

同一个类中

ok

ok

ok

ok

同一包中

ok

ok

ok

子类

ok

不同包中

ok

Import-导入:类名称变长,写起来很麻烦。为了简化,使用了一个关键字:import,可以使用这个关键字导入指定包中的类。记住:实际开发时,到的哪个类就导入哪个类,不建议使用*.

importpacka.*;//这个仅仅是导入了packa当前目录下的所有的类。不包含子包

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论