黑马程序员----java面向对象04(异常、包)
2013-11-05 16:22
609 查看
一.异常的概述
/*
* 异常:就是程序在运行过程中出现不正常情况
*
* 异常由来:问题也是现实生活中的一种事物,也可以通过java的类的形式进行描述,并封装成对象
* 异常也就是java对不正常现象进行描述后的对象体现
*
* 问题分为两种,一种是严重的问题;一种是非严重的问题
* 对于严重的,java通过Error类进行描述(癌症)
* 对于非严重的,java通过Exception进行描述(感冒发烧)
*
* 异常处理代码格式
* try{
* 需要被检测的代码
* }
* catch(异常类 变量){
* 处理异常的代码
* }
* finally{
* 一定会执行的代码
* }
*
* */
代码示例:
二.多异常情况
/*
* 多异常情况的出现
* 1、如果有多个异常,当第一个异常出现时程序就会停止
* 2、声明异常是在功能上
* 3、声明异常时,声明更为具体的异常
* 4、有几个异常就对应几个catch代码块
* 5、如果多个catch块出现了继承关系,父类要放在最后执行 例如:Exception和ArrayIndexOutOfBoundsException
*
* */
代码示例:
三.自定义异常
/*
* 自定义异常:
* 异常中,有些问题未被java所描述并封装对象,所以对于这些特定的问题可以按照java封装对象的思想
* 讲特有的问题进行自定义的异常封装
* 也就是java中对有的问题没有解决办法的,要自己定义解决办法
*
* 需求:对于本程序中,对于除数是负数也视为是错误的,是无法进行运算的,
* 那么就需要对这个问题进行自定义的描述
*
* 1、java中定义的异常可以自动抛出,也可以由手动抛出;自定义的异常只能手动抛出
* 2、当在函数内部出现throw抛出异常时,就要给出对应的处理动作:要么在函数内部处理,要么抛出由调用者处理
* 3、出现了问题,那么内部解决,要么抛出去
*
*
* throw和throws的区别
* 1、throw定义在函数内;throws定义在函数上
* 2、throw后面跟的是异常对象;throws后面跟的是异常类,可以是多个,用逗号隔开
*
* */
代码示例:
四.异常示例(电脑讲课出现蓝屏和冒烟情况)
/*
* 老师用电脑上课的时候出现了问题,蓝屏和冒烟
* */
五.内部类
/*
* 内部类:
* 1、内部类可以直接访问外部类的成员,包括私有(相当于类中函数可以访问类中变量一样)
* 原因:是因为内部类中持有了一个外部类的引用,格式为 外部类名.this.
* 2、外部类要想访问内部类,必须建立内部类对象
* 格式为:外部类名.内部类名 变量名 = 外部类对象.内部类对象;
*
* 什么时候使用内部类?
* :当事物的内部还有事物时,并且内部事物可以直接访问外部事物中的内容时,就需要定义内部类,例如心脏类定义在人体类中,可以直接访问人体功能
* */
代码示例:
六.RunTimeException异常
/*
* Exception子类中有个一个特殊的异常RunTimeException异常,运行时异常:
* 特点:
* 1、如果RunTimeException类或其子类在函数中抛出了,函数上是不需要声明的
* 2、如果在函数中声明了该异常,调用者不需要进行处理(继续抛或者try)
*
* 之所以不需要在函数上声明,是因为不需要调用者去处理
* 因为在运行过程中,出现了无法继续运算的情况,这时候需要对代码进行修正
*
*
* RunTimeException类下的三个常见子类:
* ArithmeticException(算法异常)
* NullPointerException(空指针异常)
* IndexOutOfBoundsException(角标越界异常)
*
* 定义异常类继承异常类,要么继承Exception,要么继承RunTimeException
* */
七.finally关键字
八.示例:求长方形和圆形的面积
/*
* 需求:有一个圆形和长方形,都可以获取面积,对于面积如果出现非法的数值,那么视为面积出现了问题
* */
代码示例:
九.异常的总结
/*
* 异常总结:
* 1、什么是异常:是对问题的描述,将问题进行对象的封装
* 2、异常体系:
* throwable
* |--Error
* |--Exception
* |--系统异常
* |--RunTimeException
* |--自定义异常
* 3、异常体系的特点:
* 异常体系中的所有类和建立的对象都具有可抛性,可以被throws和throw关键字所操作
* 4、throw和throws的区别:
* throws定义在函数上,用于抛出异常类,可以抛出多个异常,用逗号隔开
* throw定义在函数中,用于抛出异常对象
* 5、当函数内容抛出异常时,要么就在内部捕获处理,要么就对其方法声明并抛出
* RunTimeException除外,要是抛出的是RunTimeException异常,那么可以不用声明
* 6、如果函数声明了异常,调用者可以try处理,也可以继续抛出
* 7、try三种格式
try{
*
* }catch(){
*
* }
---------------------
try{
//定义被检测代码
}catch(){
//处理异常代码
}finally{
//一定会执行的代码
}
---------------------
try{
}finally{
}
注意:finally中一般定义的是关闭资源的代码,只有一种情况是不会执行的:System.exit(0);
8、自定义异常
class MyException extends Exception{
MYException(String message){
super(message);
}
}
好处:按照java面向对象思想,把程序中出现的特有问题进行封装
9、异常的好处
一,将问题进行封装
二,将正常流程代码和问题处理代码分隔开来,利于阅读
* */
public class Exception_zongjie {
}
/*
* 异常:就是程序在运行过程中出现不正常情况
*
* 异常由来:问题也是现实生活中的一种事物,也可以通过java的类的形式进行描述,并封装成对象
* 异常也就是java对不正常现象进行描述后的对象体现
*
* 问题分为两种,一种是严重的问题;一种是非严重的问题
* 对于严重的,java通过Error类进行描述(癌症)
* 对于非严重的,java通过Exception进行描述(感冒发烧)
*
* 异常处理代码格式
* try{
* 需要被检测的代码
* }
* catch(异常类 变量){
* 处理异常的代码
* }
* finally{
* 一定会执行的代码
* }
*
* */
代码示例:
public class ExceptionDemo { public static void main(String[] args) { Demo1 d = new Demo1(); try{ System.out.println(d.show(3,0)); } catch(Exception e){ System.out.println("除数为零啦"); System.out.println("------------"); System.out.println(e.getMessage()); System.out.println("------------"); System.out.println(e.toString()); System.out.println("------------"); e.printStackTrace(); } finally{ } } } class Demo1{ int x =4; int show(int a,int b){ return a/b; } }
二.多异常情况
/*
* 多异常情况的出现
* 1、如果有多个异常,当第一个异常出现时程序就会停止
* 2、声明异常是在功能上
* 3、声明异常时,声明更为具体的异常
* 4、有几个异常就对应几个catch代码块
* 5、如果多个catch块出现了继承关系,父类要放在最后执行 例如:Exception和ArrayIndexOutOfBoundsException
*
* */
代码示例:
public class ExceptionDemo2 { public static void main(String[] args) { Demo2 d = new Demo2(); try { d.show(3, 1); } catch (ArrayIndexOutOfBoundsException abe) { } catch (ArithmeticException ae) { } } } class Demo2 { //在功能上通过throws关键字声明了该功能可能出现的异常 public int show(int a, int b) throws ArrayIndexOutOfBoundsException,ArithmeticException{ int[] num = new int[a]; System.out.println(num[a]); return a/b; } }
三.自定义异常
/*
* 自定义异常:
* 异常中,有些问题未被java所描述并封装对象,所以对于这些特定的问题可以按照java封装对象的思想
* 讲特有的问题进行自定义的异常封装
* 也就是java中对有的问题没有解决办法的,要自己定义解决办法
*
* 需求:对于本程序中,对于除数是负数也视为是错误的,是无法进行运算的,
* 那么就需要对这个问题进行自定义的描述
*
* 1、java中定义的异常可以自动抛出,也可以由手动抛出;自定义的异常只能手动抛出
* 2、当在函数内部出现throw抛出异常时,就要给出对应的处理动作:要么在函数内部处理,要么抛出由调用者处理
* 3、出现了问题,那么内部解决,要么抛出去
*
*
* throw和throws的区别
* 1、throw定义在函数内;throws定义在函数上
* 2、throw后面跟的是异常对象;throws后面跟的是异常类,可以是多个,用逗号隔开
*
* */
代码示例:
public class ExceptionDemo3 { public static void main(String[] args) { Demo3 d = new Demo3(); try { d.show(9,-3); } catch (FuShuException fe) { //接收抛出的异常对象 System.out.println(fe.toString()); //打印异常信息 } } } //自定义异常 class FuShuException extends Exception{ //1、自定义异常类名后缀加上Exception,继承了异常类 private String msg; FuShuException(String msg) { super(msg); } //这里隐藏了一句话,由于继承了Exception,所以也已经拥有了getMassage方法 } class Demo3{ void show(int a,int b) throws FuShuException{ //声明出现了异常 if(b<0){ throw new FuShuException("除数为负数的异常 /by fushu"); //手动抛出异常对象 } } }
四.异常示例(电脑讲课出现蓝屏和冒烟情况)
/*
* 老师用电脑上课的时候出现了问题,蓝屏和冒烟
* */
public class ExceptionText { public static void main(String[] args) { Teacher t = new Teacher("毕老师"); //这样当老师产生的时候电脑也产生了 try{ t.teach(); }catch(NoPlanException e){ System.out.println(e.toString()); System.out.println("换老师或者放假"); } } } //老师类 class Teacher{ private String name; private Computer c; Teacher(String name){ this.name = name; c = new Computer(); } //老师有一个讲课方法 void teach() throws NoPlanException{ c.Boot(); System.out.println(name+"开始讲课"); try{ c.question(); }catch(LanPingException e){ System.out.println(e.toString()); c.reset(); }catch(MaoYanException e){ throw new NoPlanException("电脑冒烟了,课时无法继续"); //抛出新异常 } } } //电脑类 class Computer{ //开机方法 void Boot(){ System.out.println("电脑开机"); } //重启方法 void reset(){ System.out.println("重启电脑"); } //当电脑蓝屏时,假设当i=2时电脑蓝屏,当i=3时电脑冒烟 int i=3; void question() throws LanPingException,MaoYanException{ if(i==2){ throw new LanPingException("电脑蓝屏了"); } if(i==3){ throw new MaoYanException("电脑冒烟了"); } } } //蓝屏异常 class LanPingException extends Exception{ public LanPingException(String message) { super(message); } } //冒烟异常 class MaoYanException extends Exception{ public MaoYanException(String message) { super(message); } } //课时计划无法继续异常 class NoPlanException extends Exception{ public NoPlanException(String message) { super(message); } }
五.内部类
/*
* 内部类:
* 1、内部类可以直接访问外部类的成员,包括私有(相当于类中函数可以访问类中变量一样)
* 原因:是因为内部类中持有了一个外部类的引用,格式为 外部类名.this.
* 2、外部类要想访问内部类,必须建立内部类对象
* 格式为:外部类名.内部类名 变量名 = 外部类对象.内部类对象;
*
* 什么时候使用内部类?
* :当事物的内部还有事物时,并且内部事物可以直接访问外部事物中的内容时,就需要定义内部类,例如心脏类定义在人体类中,可以直接访问人体功能
* */
代码示例:
public class InnerDemo { public static void main(String args[]){ Demo.Demo_Nei dn = new Demo().new Demo_Nei(); //例2 } } class Demo{ private int x=4; class Demo_Nei{ int x = 3; public void show(){ int x =5; System.out.println("x的值为:"+x); //Demo.this.x this.x x } } }
六.RunTimeException异常
/*
* Exception子类中有个一个特殊的异常RunTimeException异常,运行时异常:
* 特点:
* 1、如果RunTimeException类或其子类在函数中抛出了,函数上是不需要声明的
* 2、如果在函数中声明了该异常,调用者不需要进行处理(继续抛或者try)
*
* 之所以不需要在函数上声明,是因为不需要调用者去处理
* 因为在运行过程中,出现了无法继续运算的情况,这时候需要对代码进行修正
*
*
* RunTimeException类下的三个常见子类:
* ArithmeticException(算法异常)
* NullPointerException(空指针异常)
* IndexOutOfBoundsException(角标越界异常)
*
* 定义异常类继承异常类,要么继承Exception,要么继承RunTimeException
* */
七.finally关键字
public class Exception_Finally { public static void main(String[] args) { Demo d = new Demo(); try { d.show(2,-9); } catch (FuShuException e) { System.out.println(e.getMessage()); //return; } finally{ //定义一定会执行的代码,通常用于关闭资源,例如关闭数据库 } System.out.println("异常结束后会执行的代码"); /* * 这段代码和finally的区别: * 如果在catch处理中return了,导致程序结束,那么这段代码就不会执行了,但finally仍然会执行 */ } } //自定义一个异常 class FuShuException extends Exception{ FuShuException(String msg) { super(msg); } } class Demo{ public void show(int a,int b) throws FuShuException{ if(b<0){ throw new FuShuException("除数是负数"); } } }
八.示例:求长方形和圆形的面积
/*
* 需求:有一个圆形和长方形,都可以获取面积,对于面积如果出现非法的数值,那么视为面积出现了问题
* */
代码示例:
public class Exception_shili { public static void main(String[] args) { Circle c = new Circle(-4.3); c.area(); } } //提取面积,用接口定义 interface Area{ public abstract void area();//方法定义格式 } //圆形 class Circle implements Area{ private double radius; public static final double PI=3.14; Circle(double radius){ if(radius<=0){ throw new NoValueException("数值不合法"); } this.radius = radius; } public void area(){ System.out.println("圆的面积是:"+radius*radius*PI); } } //长方形 class Rectangle implements Area{ private double length,width; Rectangle(double radius){ if(length<=0 || width<=0){ throw new NoValueException("数值不合法"); } this.length = length; this.width = width; } public void area(){ System.out.println("长方形的面积是:"+length*width); } } //自定义异常 class NoValueException extends RuntimeException{ private String massage; public NoValueException(String massage) { super(massage); } }
九.异常的总结
/*
* 异常总结:
* 1、什么是异常:是对问题的描述,将问题进行对象的封装
* 2、异常体系:
* throwable
* |--Error
* |--Exception
* |--系统异常
* |--RunTimeException
* |--自定义异常
* 3、异常体系的特点:
* 异常体系中的所有类和建立的对象都具有可抛性,可以被throws和throw关键字所操作
* 4、throw和throws的区别:
* throws定义在函数上,用于抛出异常类,可以抛出多个异常,用逗号隔开
* throw定义在函数中,用于抛出异常对象
* 5、当函数内容抛出异常时,要么就在内部捕获处理,要么就对其方法声明并抛出
* RunTimeException除外,要是抛出的是RunTimeException异常,那么可以不用声明
* 6、如果函数声明了异常,调用者可以try处理,也可以继续抛出
* 7、try三种格式
try{
*
* }catch(){
*
* }
---------------------
try{
//定义被检测代码
}catch(){
//处理异常代码
}finally{
//一定会执行的代码
}
---------------------
try{
}finally{
}
注意:finally中一般定义的是关闭资源的代码,只有一种情况是不会执行的:System.exit(0);
8、自定义异常
class MyException extends Exception{
MYException(String message){
super(message);
}
}
好处:按照java面向对象思想,把程序中出现的特有问题进行封装
9、异常的好处
一,将问题进行封装
二,将正常流程代码和问题处理代码分隔开来,利于阅读
* */
public class Exception_zongjie {
}
相关文章推荐
- 黑马程序员笔记——Java面向对象之异常和包
- 黑马程序员--面向对象第二部分-内部类、异常--java学习日记6(基础知识)
- 黑马程序员——Java语言基础——03.面向对象(3)异常
- 黑马程序员--Java学习笔记之面向对象思想(多态、内部类、匿名内部类、异常类)
- 黑马程序员--03.Java面向对象--04.【对象初始化的过程】【对象调用成员的过程】
- 黑马程序员——第十天(Java面向对象-异常-包)
- 黑马程序员_java基础学习笔记04_面向对象
- 黑马程序员-java基础04-面向对象基本了解
- 黑马程序员_java面向对象总结【4】(内部类、异常处理、Package)
- 黑马程序员_java基础3-面向对象(二)多态、异常、包
- 黑马程序员_Java面向对象_异常
- 黑马程序员_java基础3-面向对象(二)多态、异常、包
- 黑马程序员—java面向对象总结(4)—内部类、异常
- 黑马程序员_java面向对象_多态和异常
- 黑马程序员--Java笔记04--面向对象 及单例设计模式
- 黑马程序员_java基础3-面向对象(二)多态、异常、包
- 黑马程序员--------java面向对象 内部类、异常
- 黑马程序员----java面向对象02(继承、final)
- 黑马程序员 java面向对象
- 黑马程序员--java面向对象之this的作用总结