黑马程序员_java面向对象_多态和异常
来源:互联网 发布:大数据产业链包括哪些 编辑:程序博客网 时间:2024/05/29 19:35
1、父类的引用指向了自己子类的对象。
2、父类的引用也可以接收自己的子类对象。
三、多态的前提
1、类与类之间必须有关系,要么继承,要么实现。
2、存在覆盖。父类中有方法被子类重写。
四、多态的利与弊
利:提高了程序的可扩展性和后期可以维护性。
弊:只能使用父类中的引用访问父类中的成员。也就是说使用了多态,父类型的引用在使用功能时,不能直接调用子类中的特有方法。
注:如果父类可以创建对象,如:Animal a = new Animal(); 此时,就不能向下转型了,Cat c = (Cat)a; 这样的代码就变得不容许,编译时会报错。所以千万不能出现这样的操作,就是将父类对象转成子类类型。
五、多态的特点
1、多态中非静态成员函数的特点
成员函数在多态调用时,编译看左边,运行看右边。
2、多态中成员变量的特点
无论编译和运行,都参考左边(引用变量所属的类)。
3、多态中静态成员函数的特点
无论编译和运行,都参考左边。
多态的特点例子代码如下:
/** * 多态中成员变量、非静态函数、静态函数的特点演示 * @author liufeibo 2015 */ class Person { String name; int age=25;//父类对年龄初始化 Person(String name) { this.name=name; } public static void show() { System.out.println("speak"); } public void study() { System.out.println("study"); } } class Student extends Person//继承父类 { int age=18;//子类对年龄初始化 Student(String name) { super(name); } public static void show()//复写父类的静态函数 { System.out.println("Student speak"); } public void study()//复写父类的非静态函数 { System.out.println("Student study"); } } public class DuoTai { public static void main(String[] args) { Person p=new Student("zhangsan"); System.out.println(p.age);//输出结果为25,父类的属性值 p.show();//输出结果为speak,调用了父类的静态函数 p.study();//输出结果为Student study,调用了子类的非静态函数 } }
异常
一、概述
1、异常:就是程序在运行时出现不正常情况。
2、异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述。并封装成对象。其实就是java对不正常情况进行描述后的对象体现。
3、程序可能出现的错误或问题
a、用户输入错误导致的异常:如用户不正常使用程序,输入一些非法参数
b、设备硬件等发生的错误:如硬盘损坏等
c、物理限制:如存储空间不足等
d、代码错误:在程序编写的方法可能不正确,返回错误参数等。
二、异常体系
1、 Throwable
|---Error //严重的问题,一般不编写针对性的代码对其进行处理。
|---Exception //非严重的问题,使用针对性的处理方式进行处理。
|---R untimeException //特殊异常类,抛时不需要声明
Exception和Error的子类名都是以父类名作为后缀,且都具有一些共性内容。
2、异常体系的特点:
1、异常体系中的所有类以及建立的对象都具备可抛性。
2、也就是说可以被throw和throws关键字所操作。
3、只有异常体系具备这个特点。
三、异常有两种:
1、编译时被检测异常
该异常在编译时,如果没有处理(没有抛也没有try),编译失败。该异常被标识,代表着可以被处理。
2、运行时异常(编译时不检测)
在编译时,不需要处理,编译器不检查。该异常的发生,建议不处理,让程序停止。需要对代码进行修正。如:RuntimeException以及其类。
四、异常的处理
1、 java提供了特有的语句进行处理。
try
{
需要被检测的代码。
}
catch(异常类 变量)
{
处理异常的代码;(处理方式)
}
finally
{
一定会执行的语句;
}
注:try可单独与catch组合;try也可单独与finally组合。特殊:当执行到System.exit(0);fianlly不会执行。2、throw和throws的用法
throw定义在函数内,用于抛出异常对象。
throws定义在函数上,用于抛出异常类,可以抛出多个用逗号隔开。
当函数内容有throw抛出异常对象,并未进行try处理。必须要在函数上声明,否则编译失败。
注意:RuntimeException除外。也就说,函数内如果抛出的RuntimeExcpetion异常,函数上可以不用声明。
五、对捕获到的异常对象进行常见方法操作:
1、String getMessage();//获取异常的信息。返回字符串。
2、toString();//获取异常类名和异常信息,返回字符串。
3、printStackTrace();//获取异常类名和异常信息,以及异常出现在程序中的位置.返回值void.
4、 printStackTrace(PrintStream s)//通常用该方法将异常内容保存在日志文件中,以便查阅。
六、自定义异常
因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象。所以对这些特有的问题可以按照java中的面向对象思想。将特有的问题,进行自定义的异常封装。定义类继承Exception或者RuntimeException
1,为了让该自定义类具备可抛性。
2,让该类具备操作异常的共性方法。
七、异常的处理原则 1、函数内容如果抛出需 要检测的异常,那么函数上必须要声明。否则,必须在函数内用try/catch捕捉,否则编译失败。
2、如果调用到了声明异常的函数,那么try/catch,要么throws,否则编译失败。
3、什么时候catch,什么时候throws呢?功能内容可以解决,用catch。 解决不了,用throws告诉调用者,由调用者解决。
4、一个功能如果抛出了多个异常,那么调用时,必须有对应多个catch进行针对性处理。
内部有几个需要检测的异常,就抛几个异常,抛出几个,就catch几个。
八、自定义异常示例代码:
/*求长方形和圆的面积*/class MyException extends RuntimeException //自定义一个异常类{MyException(String meg){super(meg); //调用父类中的构造器}}class Area2{private int len,wid,sum;//len和win进行初始化Area2(int len,int wid){this.len=len;this.wid=wid;}public int show(){if(len<=0 || wid<=0){throw new MyException("长与宽有的小于等于0啦");}return sum=len*wid;}}class ExceptionDemo2 {public static void main(String[] args) {Area2 a=new Area2(-3,4); int x=a.show(); System.out.println(x);System.out.println("over");}}
- 黑马程序员_java面向对象_多态和异常
- 黑马程序员_java面向对象_抽象类和接口
- 黑马程序员_java入门_面向对象
- 黑马程序员_java面向对象_封装
- 黑马程序员_Java基础_面向对象
- 黑马程序员_Java基础_面向对象
- 黑马程序员_Java语言_面向对象
- 黑马程序员_Java语言_面向对象
- 黑马程序员_Java基础_面向对象
- 黑马程序员_java基础_面向对象
- 黑马程序员_面向对象_继承和多态
- 黑马程序员_Java基础_面向对象(内部类、异常1)
- 黑马程序员_Java基础_面向对象(异常2、练习题、导包)
- 黑马程序员_Java语言_面向对象_
- 黑马程序员_Java语言_面向对象_多态
- 黑马程序员_Java语言_面向对象_内部类
- 黑马程序员_面向对象—>异常
- 黑马程序员_java_面向对象_异常
- UITableView动态改变Cell高度
- zoj 1015 fishing net
- 链表的基本操作
- Android加载通话记录流程分析
- Jbrowse染色体片段的显示的配置方法
- 黑马程序员_java面向对象_多态和异常
- Android数据适配器(Adapter)优化:高效ViewHolder
- 吃蛋糕 cate题解
- Java:Java 队列的遍历
- 多进程和多线程的优缺点
- 二叉树中节点删除
- 美团
- HDU 5444 Elven Postman
- Java - 异常处理