---------- android培训java培训、期待与您交流! ----------

一、异常机制

  (一)异常概述

  1、异常:就是程序在运行时出现不正常情况。

  2、异常类:程序在运行时,出现的不正常情况,将情况用java的类的形式进行描述。并封装成对象。

  (二)异常分类

  对异常问题的分类:“严重的的Error”和“不严重的Exception”

  (1)一种是严重的问题:对于严重的问题,java通过Error类进行描述。

  (2)一种是不严重的问题:对于非严重的,java通过Exception类进行描述。对于Exception可以使用针对性的处理方式进行处理。

  (异常体系

  1、Throwable

    |---Error :对Error类不可处理,JVM抛出。

    |---Exception :可以定义针对性处理。

  2、异常体系的特点

  (1)异常体系中的所有类以及建立的对象都具备可抛性。

  (2)也就是说可以被throw和throws关键字所操作。

  (3)只有异常体系具备这个特点。

  (四)对异常处理的一些要求

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

  2、对方声明几个异常,就对应几个catch块。不要定义多余的catch块。如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

  建议:在进行catch处理时,catch中一定要定义具体的处理方式。不要简单定义e.printStackTrace()。也不要简单书写输出语句。

  (五)异常处理语句

  1、 java提供了特有的语句进行处理。

  try{

    需要被检测的代码

  }catch(异常类  变量){

    处理异常的代码;

  }finally{

    一定会执行的语句

  }

  有三个结合格式:

  (1)try{      } catch(){       }

  (2)try{      } finally{       }

  (3)try{      } catch(){       }finally{      }

  注意:(1)finally中定义的通常是关闭资源代码。因为资源必须释放。(2)如果在一个功能中,定义了一些必须要执行的代码,可以用try{}finally{}的方式,将一定执行的代码放在finally代码块中。(3)finally只有一种情况不会执行。当执行到System.exit(0);fianlly不会执行。

  (六)throwthrows的用法

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

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

  当函数内容有throw抛出异常对象,并未进行try处理。必须要在函数上声明,否则编译失败。注意:RuntimeExcpetion除外。

  (七)throwthrows的区别

  1、throws使用在函数上,而throw使用在函数内。

  2、throws后面跟异常类,可以跟多个,用逗号隔开。Throw后面跟的是异常对象。

  (八)对抛出异常信息的处理

  1、当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。要么在内部try catch处理。要么在函数上声明让调用者处理。

  2、一般情况下,函数内出现异常,函数上需要声明。在功能上通过throws的关键字声明了该功能有可能会出现异常类型。

  注意:Exception中有一个特殊子类RuntimeException。如果再函数内抛出RuntimeExcpetion异常,函数上可以不用声明,编译一样通过。如果函数上声明了RuntimeExcpetion异常,调用者可以不用进行处理,编译一样通过。

  3、之所以不用在函数上声明,是因为不需要让调用者处理。当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。

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

  5、对捕获到的异常对象进行常见方法操作:

  (1)String getMessage();//获取异常的信息。返回字符串。

  (2)toString();//获取异常类名和异常信息,返回字符串。

  (3)printStackTrace();//获取异常类名和异常信息,以及异常出现在程序中的位置.返回值void。JVM默认的异常处理机制,就是在调用printStackTrace方法,打印异常的堆栈的跟踪信息。

  (4)printStackTrace(PrintStream s)//通常用该方法将异常内容保存在日志文件中,以便查阅。

二、自定义异常

  因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。所以对这些特有的问题可以按照java中的面向对象思想。将特有的问题,进行自定义的异常封装。定义类继承Exception或者RuntimeException。

  1、为了让该自定义类具备可抛性。

  2、让该类具备操作异常的共性方法。

  当要定义自定义异常的信息时,可以使用父类已经定义好的功能。异常信息传递给父类的构造函数。因为父类中已经把异常信息的操作都完成了。所以子类只要在构造时,将异常信息传递给父类的构造函数。通过super语句,就可以直接通过getMessage方法获取自定义的异常信息。

 class MyException extends Exception
{
private String msg;
MyException(String msg){
super(msg);//将会返回输入的信息
6 }
7 }

  注:自定义异常必须是自定义类有继承关系,通常继承Exception。

  要继承Exception是因为:异常体系有一个特点,异常类和异常对象都被抛出。他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。只有这个体系中的类和对象才可以被throws和throw操作。

三、异常的好处与处理原则

  (一)异常的好处

  1、将问题进行封装;

  2、将正常流程的流程代码和问题处理代码向分离,方便于阅读。

  (二)异常处理的原则

  1、方式有两种:try和throw

  2、调用到抛出异常的功能时,抛出几个,就处理几个。一个try对应多个catch。

  3、多个catch时,父类的catch放在最下面。否则编译会报错,因为其余的catch语句执行不到。

  4、catch内,需要定义针对性的处理方式。不要简单的定义printStackTrace,输出语句。也不要不写。当捕获到的异常,本功能处理不了时,可以继续在catch中抛出。代码示例如下:

 try{
throw new AException();
}catch (AException e){
throw e;//如果该异常处理不了,但并不属于该功能出现的异常。
}

  5、或者Exception可以处理,当需要将异常产生后和本功能相关的问题提供出去,让调用者知道。并处理。也可以将捕获异常处理后,转换新的异常。例如在汇款的例子中,在给别人转账时,如果ATM机出现故障,这时可以另外找地方去转,也可以告诉对方,转账不成功。代码示例如下:

 try{
throw new AException();
}catch (AException e){
// 对AException处理。
throw new BException();
}

四、异常的注意事项

  (一)在子父类覆盖时

1、子类抛出的异常必须是父类的异常的子类或子集或父类异常。

2、如果父类或者接口没有异常抛出时,子类覆盖出现异常,只能try不能抛。

3、如果父类抛出多个异常,那么子类只能抛出父类异常的子集或子类。

4、父类方法没有抛出异常,子类绝对不能抛。

  (二)问题能在内部被解决就不需要声明。

  (三)catch是用于处理异常,如果没有catch就代表异常没有被处理,如果该异常是检测时异常。那么必须声明。

-----------------------------------------------包(package-----------------------------------------------

一、包(Package:相当于文件夹,是一种封装的表现形式。包名可以是多级的。

二、包的作用

  1、避免多个类重名的情况。如果出现两个相同名字的类,可通过包将两者区分,从而避免冲突。

  2、对类文件进行分类管理,可以将相关的一些类放在同一个包中。

  3、为类提供多层命名空间。

  4、包的出现可以将java的类文件和源文件相分离。

三、书写规则

  1、包名必须写在程序文件的第一行。

  2、类文件的全称:包名.类名。

四、包与包间的访问

  1、包与包间进行访问,被访问的包中的类以及类中的成员,需要public修饰。

  2、不同包中的子类可以直接访问父类中被protected权限修饰符修饰的成员。

  3、包与包间访问可以使用的权限只有两种:public和protected。

五、权限

public

protected

default

private

同一个类中

OK

OK

OK

OK

同一个包中

OK

OK

OK

×

子类

OK

OK

×

×

不同包中

OK

×

×

×


六、包的导入(关键字:
import

  1、可以简化类名。在调用其他包中的类时,需要写类的全称,也就是连同包名一起书写。

  2、import导入的是包中的类,不导入包中的包。

  3、一个程序文件中只有一个package,可以有多个import。

  建议:(1)在导入包时,如果包中有很多类,可以使用通配符 *来替代包中的所有类。但是,建议不要使用通配符 * ,因为将不需要使用的类导入后,会占用内存空间。所有在编写程序时,要使用包中的哪些类,就导入哪些类。(2)定义包名不要重复,可以使用url来完成定义,url是唯一的。(3)导入的不同包中有相同类时,必须写类的全名以区分,否则将会报错。

七、Jar包

  (一)Jar

  类越来越多,我们可以用包来装,当包越来越多时,我们可以将包进行压缩。而java中用jar这个工具来对包进行压缩,压缩后的后缀名为jar。

  (二)一些Jar命令

  1、创建jar包:jar –cvf mypack.jar packa packb

  2、查看jar包:jar –tvf mypack.jar [>定向文件]

  3、解压缩:jar –xvf mypack.jar

  4、自定义jar包的清单文件:jar –cvfm mypack.jar mf.txt packa packb

---------- android培训java培训、期待与您交流! ----------

黑马程序员——【Java基础】——面向对象(二)异常机制、包(Package)的更多相关文章

  1. 黑马程序员——JAVA基础之简述面向对象,类,变量,匿名对象

    ------- android培训.java培训.期待与您交流! ---------- 面向对象: 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将 ...

  2. 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)

    正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G  QQ 1481135711 这是我总 ...

  3. 黑马程序员----java基础笔记上(毕向东)

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...

  4. 黑马程序员----java基础笔记中(毕向东)

    <p>------<a href="http://www.itheima.com" target="blank">Java培训.Andr ...

  5. 黑马程序员 Java基础<九>---> 多线程

    ASP.Net+Android+IOS开发..Net培训.期待与您交流! 多线程 一.概述: 1.线程是什么 说到线程,我们就得先说说进程.所谓进程,就是一个正在执行(进行)中的程序,每一个进程执行都 ...

  6. 黑马程序员——JAVA基础之网络编程

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 网络编程 网络模型:OSI参考模型和TCP/IP参考模型 网络通讯三要素: IP地址:InetA ...

  7. 黑马程序员——JAVA基础之泛型和通配符

    ------- android培训.java培训.期待与您交流! ---------- 泛型:            JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...

  8. 黑马程序员——JAVA基础之语法、命名规则

    ------- android培训.java培训.期待与您交流! ---------- 1.java语言组成:关键字,标识符,注释,常量和变量,运算符,语句,函数,数组. 2.java关键字:被Jav ...

  9. 黑马程序员 Java基础<十八>---> 网路编程

    --------------- ASP.Net+Android+IO开发S..Net培训.期待与您交流! --------------- 第一  概述 一.概述: 1.网络模型:OSI参考模型和TCP ...

  10. 黑马程序员——JAVA基础之包,权限

    ------- android培训.java培训.期待与您交流! ---------- 包(package) 对类文件进行分类管理. 给类提供多层命名空间. 写在程序文件的第一行. 类名的全称的是:包 ...

随机推荐

  1. IIS 安装 pydio

    Introduction In this how-to, we’ll see the installation of Pydio (Put Your Data In Orbit), which is ...

  2. 也谈谈 Redis 和 Memcached 的区别

    本文作者: 伯乐在线 - 朱小厮 . 说到redis就会联想到memcached,反之亦然.了解过两者的同学有那么个大致的印象: redis与memcached相比,比仅支持简单的key-value数 ...

  3. uva------Help is needed for Dexter(11384)

    Problem H Help is needed for Dexter Time Limit: 3 Second Dexter is tired of Dee Dee. So he decided t ...

  4. prepareStatement和Statement的区别

    1:创建时的区别:    Statement stm=con.createStatement();    PreparedStatement pstm=con.prepareStatement(sql ...

  5. 8月10日 微软MVP巡讲 Windows 开发专题活动

    1.签到 2.准备工作 3.讲师正在准备 4.讲师发言 5.本次活动进行中 合影

  6. 注册并启动 Reporting Services SharePoint 服务

    在安装 SharePoint 之前已安装 Reporting Services SharePoint 模式.所以Reporting Services SharePoint 是不能正常使用的. 安装完S ...

  7. qml android 的一个例子qtHangMan

    这个例子有2个好处: 1.解决了黑屏问题 2.演示了应用内购买的问题

  8. Understanding Virtual Memory

    Understanding Virtual Memory by Norm Murray and Neil Horman Introduction Definitions The Life of a P ...

  9. 小记:获取post和get请求。

    package com.lixu.httpget_post; import java.io.ByteArrayOutputStream; import java.io.IOException; imp ...

  10. struts2的 result 通配符 OGNL

    result: 1). result 是 action 节点的子节点 2). result 代表 action 方法执行后, 可能去的一个目的地 3). 一个 action 节点可以配置多个 resu ...