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. Tinyhttpd 代码学习

    前阵子,参加了实习生面试,被面试官各种虐,问我说有没有读过一些开源的代码.对于只会用框架的我来说真的是硬伤啊,在知乎大神的推荐下在EZLippi-浮生志找了一些源代码来阅读,于是从小型入手,找了Tin ...

  2. JavaScript: 使用 atan2 来绘制 箭头 和 曲线

    最近搞Canvas绘图,知道了JavaScript中提供了atan2(y,x)这样一个三角函数.乍眼一看,不认识,毕竟在高中时,学过的三角函数有:sin,cos,arcsin,arccos,tan,a ...

  3. MySQL (二)-- 数据类型(列类型)、数值类型、 小数类型、 时间日期类型、 字符串类型 、 MySQL记录长度、列属性

    1 数据类型(列类型) 所谓的数据类型:对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中将数据类型分成了三大类: 2 数值类型 数值类型数据:都 ...

  4. Java-TreeSet的用法-入门

    Java语言中,Set接口有3种通用实现:HashSet, TreeSet,LinkedHashSet.TreeSet是一种能够对内部元素进行排序的集合,它使用红黑树来存储内部元素,基于元素的值进行排 ...

  5. #黑客社会工程学攻防演练#[Chapter 1]

    1.1 什么是社会工程学 社会工程学(Social Engineering)是关于建立理论通过自然的.社会的和制度上的途径并特别强调根据现实的双向计划和设计经验来一步一步地解决各种社会问题.社会工程学 ...

  6. 201521123106 《Java程序设计》第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 finally 题目4-2 1.1 截图你的提交结果(出现学 ...

  7. JAVA课程设计 计算器模拟程序 王华俊(201521123015)

    1.团队课程设计博客链接 http://www.cnblogs.com/yuanj/p/7072137.html 2.个人负责模块或任务说明 GUI界面设计 各类之间拼接 3.自己的代码提交记录截图 ...

  8. MySQL的数据备份以及pymysql的使用

    一.MySQL的数据备份 语法: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql #示例: #单库备份 mysqldump -uroot -p123 ...

  9. redis 基础学习总结

    背景:因为项目用到了redis,加上之前一直听说了redis,但一直没有用过,正好项目现在要用到了,抽时间简单学习了下,做个记录总结下. 一 .Redis简介 介绍Redis之前,先了解下NoSQL ...

  10. python实现裴波那契数列

    def Fib(n): ''' 假定序号为0或者1,返回1,序号为2时返回2 ''' before = 1 after = 1 for i in range(n): before, after = a ...