Java面向对象  异常

知识概要:

                 (1)异常的概述

                 (2)异常的体系

                 (3)异常的处理

                 (4)Runtime异常

                 (5)自定义异常

                 (6)异常 - finally

                 (7)异常总结

1.异常的概述:

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

异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。

其实就是java对不正常情况进行描述后的对象体现。

2.异常的体系和结构

对于问题的划分:两种:一种是严重的问题,一种非严重的问题。

对于严重的,java通过Error类进行描述。

         对于Error一般不编写针对性的代码对其进行处理。

对与非严重的,java通过Exception类进行描述。

         对于Exception可以使用针对性的处理方式进行处理。

         无论Error或者Exception都具有一些共性内容。

         比如:不正常情况的信息,引发原因等。

Throwable

|--Error

|--Exception

Throwable中的方法

    getMessage()

         • 获取异常信息,返回字符串。

     toString()

         • 获取异常类名和异常信息,返回字符串。

     printStackTrace()

         • 获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。

printStackTrace(PrintStream s)

        • 通常用该方法将异常内容保存在日志文件中,以便查阅。

class Demo
{
int div(int a,int b)throws Exception //在功能上通过throws的关键字声明了该功能有可能会出现问题。
{
return a/b;
}
} class ExceptionDemo
{
public static void main(String[] args)
{
Demo d = new Demo();
try
{
int x = d.div(4,0);
System.out.println("x="+x);
}
catch (Exception e) //Exception e = new ArithmeticException();
{
System.out.println("除零啦");
System.out.println(e.getMessage()); // by zero;
System.out.println(e.toString()); // 异常名称 : 异常信息。 e.printStackTrace(); //异常名称,异常信息,异常出现的位置。
//其实jvm默认的异常处理机制,就是在调用printStackTrace方法。
//打印异常的堆栈的跟踪信息。 } System.out.println("over"); }
}

3,异常的处理

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

try

{

           需要被检测的代码;

        }

     catch(异常类 变量)

       {

         处理异常的代码;(处理方式)

       }

finally

{

        一定会执行的语句;

}

throws和throw

throws用于标识函数暴露出的异常。

     throw用于抛出异常对象。

     throws与throw的区别:

• thorws用在函数上,后面跟异常类名。

         • throw用在函数内,后面跟异常对象。

在函数上声明异常。

          便于提高安全性,让调用出进行处理。不处理编译失败。

对多异常的处理

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

         2,对方声明几个异常,就对应有几个catch块。不要定义多余的catch块。

         如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

建立在进行catch处理时,catch中一定要定义具体处理方式。

不要简单定义一句 e.printStackTrace(),

         也不要简单的就书写一条输出语句。

<span style="font-size:18px;">class Demo
{
int div(int a,int b)throws ArithmeticException,ArrayIndexOutOfBoundsException//在功能上通过throws的关键字声明了该功能有可能会出现问题。
{ int[] arr = new int[a]; System.out.println(arr[4]); return a/b;
}
} class ExceptionDemo2
{
public static void main(String[] args) //throws Exception
{
Demo d = new Demo();
try
{
int x = d.div(5,0);
System.out.println("x="+x);
} catch(Exception e)//出错
{
System.out.println("hahah:"+e.toString());
}
catch (ArithmeticException e)
{
System.out.println(e.toString());
System.out.println("被零除了!!"); }
catch (ArrayIndexOutOfBoundsException e)
{
System.out.println(e.toString());
System.out.println("角标越界啦!!");
} /**/ System.out.println("over"); }
}
</span>

5.自定义异常

自定义异常

需求:在本程序中,对于除数是-1,也视为是错误的是无法进行运算的。

那么就需要对这个问题进行自定义的描述。

当在函数内部出现了throw抛出异常对象,那么就必须要给对应的处理动作。

        要么在内部try catch处理 ,要么在函数上声明让调用者处理。

一般情况在,函数内出现异常,函数上需要声明。

发现打印的结果中只有异常的名称,却没有异常的信息。

       因为自定义的异常并未定义信息。

如何定义异常信息呢?

       因为父类中已经把异常信息的操作都完成了。

       所以子类只要在构造时,将异常信息传递给父类通过super语句。

       那么就可以直接通过getMessage方法获取自定义的异常信息。

自定义异常:

        必须是自定义类继承Exception。

继承Exception原因:

       异常体系有一个特点:因为异常类和异常对象都被抛出。

       他们都具备可抛性。这个可抛性是Throwable这个体系中独有特点。

只有这个体系中的类和对象才可以被throws和throw操作。

class FuShuException extends Exception //getMessage();
{
private int value; FuShuException()
{
super();
}
FuShuException(String msg,int value)
{
super(msg);
this.value = value;
} public int getValue()
{
return value;
} } class Demo
{
int div(int a,int b)throws FuShuException
{
if(b<0)
throw new FuShuException("出现了除数是负数的情况------ / by fushu",b);//手动通过throw关键字抛出一个自定义异常对象。 return a/b;
}
} class ExceptionDemo3
{
public static void main(String[] args)
{
Demo d = new Demo();
try
{
int x = d.div(4,-9);
System.out.println("x="+x);
}
catch (FuShuException e)
{
System.out.println(e.toString());
//System.out.println("除数出现负数了");
System.out.println("错误的负数是:"+e.getValue());
} System.out.println("over"); }
} /*
class Throwable
{
private String message;
Throwable(String message)
{
this.message = message;
} public String getMessage()
{
return message;
}
} class Exception extends Throwable
{
Exception(String message)
{
super(message);
}
} class Person
{
String name;
Person(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
} class Student extends Person
{
Student (String name)
{
super(name);
}
}

Exceptoin中有一个特殊的子类异常RuntimeException 运行时异常。

如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。

如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过;

之所以不用在函数声明,是因为不需要让调用者处理。

        当该异常发生,希望程序停止。因为运行时,出现无法继续运算的情况,希望停止程序后,对代码进行修正。

自定义异常时:如果该异常的发生,无法在继续进行运算,

        就让自定义异常继承RuntimeException。

总结对于异常分两种:

    1,编译时被检测的异常。

    2,编译时不被检测的异常(运行时异常。RuntimeException以及其子类)

代码实例:

class FuShuException extends RuntimeException
{
FuShuException(String msg)
{
super(msg);
}
}
class Demo
{
int div(int a,int b)throws Exception//throws ArithmeticException
{ if(b<0)
throw new Exception("出现了除数为负数了");
if(b==0)
throw new ArithmeticException("被零除啦");
return a/b;
}
} class ExceptionDemo4
{
public static void main(String[] args)
{ Demo d = new Demo(); int x = d.div(4,-9);
System.out.println("x="+x); System.out.println("over");
}
} /*
class Person
{
public void checkName(String name)
{ //if(name.equals("lisi"))//NullPointerException
if("lisi".equals(name))//if(name!=null && name.equals("lisi"))
System.out.println("YES");
else
System.out.println("no");
}
} main()
{
Person p = new Person();
p.checkName(null);
}



异常在子父类覆盖中的体现;

     1,子类在覆盖父类时,如果父类方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。

     2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。

     3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。

          如果子类方法发生了异常。就必须要进行try处理。绝对不能抛。





Java面向对象 异常的更多相关文章

  1. Java面向对象之异常详解

    目录 Java面向对象之异常[一] Java面向对象之异常[二] 捕获异常的规则 访问异常信息 异常对方法重写的影响 finally详解 Java面向对象之异常[一] Java面向对象之异常[二] 往 ...

  2. Java面向对象之异常【一】

    目录 Java面向对象之异常[一] 异常的继承体系 Error Exception 异常是否受检 unchecked exceptions(不受检异常) checked exceptions(受检异常 ...

  3. Java 面向对象异常处理,finally,覆盖时异常特点,package,import,包之间的访问(10)

    Java 面向对象异常处理, finally:final 关键字的用法参考http://www.cnblogs.com/itcqx/p/5541659.html 覆盖时异常特点,package,imp ...

  4. Java 面向对象 异常处理:RunTimeexception,try-catch,异常声明throws,自定义异常,throw和throws的区别,多异常处理(9)

    Java 面向对象 异常处理:RunTimeexception,try-catch,异常声明throws,自定义异常,throw和throws的区别,多异常处理(9)

  5. java数据结构 • 面向对象 • 异常 • 随机数·时间

    • 语法基础 • 控制流 • 数据结构 • 面向对象 • 异常 • 随机数 //String常用的方法: indexOf   charAt   charAt   codePointAt   compa ...

  6. JAVA面向对象

    JAVA面向对象 对象   我们生活中能看到能摸到的一切事物都是对象.在程序中模拟出生活中的所有东西万物皆对象   只要是对象--属性和行为(方法)   属性   对象有什么   例如:学生有姓名.学 ...

  7. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  8. Java面向对象的多态

    Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...

  9. Java——面向对象基础

    Java继承 继承的概念 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类具有父类的各种属性和方法,或子类从父类继承方法,使得子类具 ...

随机推荐

  1. Singleton(单例)模式

    Singleton(单例)模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. public class Singleton { private static Singleton ourIns ...

  2. 第2阶段——编写uboot之编译测试以及改进(3)

    编译测试: 1.将写好的uboot复制到linux下面 2.make编译,然后将错误的地方修改,生成boot.bin (编译出错的解决方案:http://www.cnblogs.com/lifexy/ ...

  3. 基于NIOS-II的示波器:PART3 初步功能实现

    本文记录了在NIOS II上实现示波器的第三部分. 本文主要包括:硬件部分的BRAM记录波形,计算频率的模块,以及软件部分这两个模块的驱动. 本文所有的硬件以及工程参考来自魏坤示波仪,重新实现驱动并重 ...

  4. C# XmlDocument操作XML

    XML:Extensible Markup Language(可扩展标记语言)的缩写,是用来定义其它语言的一种元语言,其前身是SGML(Standard Generalized Markup Lang ...

  5. SNS团队Beta阶段第五次站立会议(2017.5.26)

    1.立会照片 2.每个人的工作 成员 今天已完成的工作 明天计划完成的工作 罗于婕 生词本功能测试,bug修复 发音图标的改进 龚晓婷 辅助完善历史纪录的功能 对于历史记录功能的测试 林仕庄 继续完善 ...

  6. 201521123096《Java程序设计》第八周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 实验中使用了s ...

  7. 201521123026 《Java程序设计》第5周学习总结

    1. 本章学习总结 尝试使用思维导图总结有关多态与接口的知识点 使用常规方法总结其他上课内容 1.接口的出现时为了实现多态,多态的实现不一定依赖于接口. 2.接口的常见成员有:全局常量和抽象方法. 3 ...

  8. 201521123068《Java程序设计》第5周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 查看脑图->多态与接口 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 1.代码阅读:Child压缩包内源 ...

  9. Eclipse rap 富客户端开发总结(9) : rap上传与下载

    一 上传 上传即将文件上传到服务器上,在客户端需要写相应的脚本,服务器端需要注册相应的 handle 接受客户端的请求. 原理: Rap 的上传和下载是通过普通的 web 的方式进行上传和下载的 ,  ...

  10. Mybatis第三篇【动态SQL】

    动态SQL 何为动态SQL??回顾一下我们之前写的SSH项目中,有多条件查询的情况,如下图 我们当时刚开始做的时候,是需要在Controller中判断SQL是否已经有条件了,因为SQL语句需要拼接起来 ...