黑马程序员—java基础_面向对象3

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

1.多态:可以理解为事物存在的多种形态

猫 x=new 猫();

动物 x=new 猫();

多态的体现:父类的引用指向子类的对象。父类的引用也可以接收子类对象。

多态的前提:必须是类与类之间存在关系,要么继承,要么实现。通常还有一个前提:存在覆盖。

多态的好处:多态的出现大大提高了程序的扩展性。

多态的弊端:提高了扩展性,但是只能使用父类的 引用访问父类中的成员。

(1)多态中成员函数的特点;

在编译时期,参阅引用型变量所属的类中是否有调用的方法,如果有编译通过,如果没有,编译失败。

在运行时期:参阅对象所属的类中是否有调用的方法。

简单总结:成员函数在多态调用时,编译看左边,运行看右边。

如果想要调用子类饿特有方法,强制将父类的引用转成子类类型:Cat c=(Cat)a

千万不要出现将父类对象转成子类类型,我们能转换的是父类引用指向了子类对象时,该引用可以被提升,也可以被转换,多态自始至终都是子类对象在做着变化。

(2)多态中,成员变量的特点:

无论编译和运行,都参考左边(引用型变量所属的类)

(3)多态中,静态成员函数的特点:

无论编译和运行,都参考左边。

2.Object

是所有对象的直接或者间接父类,传说中的上帝。该类中定义的是所有对象都具备的功能。

Object类中已提供对对象是否相同的比较方法,如果自定义类中也有比较相同的功能,没有必要重新定义,只要沿袭父类中的功能,建立自己特有的比较内容即可:覆盖。

3.内部类

内部类的访问规则:

内部类可以直接访问外部类的成员,包括私有。因为内部类持有一个外部类的引用,格式:外部类名.this。

外部类要访问内部类,必须建立内部类对象。

访问格式:

(1)当内部类定义在外部类的成员位置上,而且非私有,可以在外部类直接建立内部类对象:外部类名.内部类名 变量名=外部类对象.内部类对象 Outer.Inner in=new Outer().new Inner();

(2)当内部类在成员位置上,就可以被成员修饰符所修饰,比如private,static

当内部类被static修饰后,只能直接访问外部类中的static成员,出现访问权限。

在外部其他类中,访问static内部类的非静态成员:Outer.Inner().Function();

在外部其他类中,访问static内部类的静态成员:Outer.Inner.Function();

注意:当内部类中定义类静态成员,该内部类必须是静态的,当外部类中的静态方法访问内部类时,内部类也必须是静态的。

当描述事物时,事物的内部还有事物,该事物就用内部类来描述,因为内部类事物在使用外部类的内容。

(3)内部类定义在局部时:不可以被成员修饰符修饰,可以直接访问外部类中的成员,但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量

4.匿名内部类

(1)匿名内部类其实就是内部类的简写形式

(2)定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。

(3)匿名内部类的格式:new 父类或者接口(){定义子类内容}

(4)其实匿名内部类就是一个匿名子类对象

(5)匿名内部类中定义的方法最好不要超过3个。

5.异常(Throwable)

异常就是程序子啊运行时出现的不正常情况。

对于异常的划分:一种是严重的问题(Error),一般不编写针对性代码进行处理;另一种是非严重的问题(Exception)可以使用针对性的处理方式

异常体系:特点:异常体系中所有类以及建立的对象都具有可抛性,可以被throw和throws关键词所操作。

Throwable

Error

Exception

RuntimeException

异常的好处:将问题进行封装,将正常流程代码和问题处理代码想分离,方便阅读。

6.异常的处理

try

需要被检测的代码;

catch(异常类 变量)

处理异常的代码;

finally

一定会执行的语句;

finally定义的通常是关闭资源代码,因为资源必须释放,只有一种情况不会执行到:System.exit(0);

对捕获到的异常对象进行常见的方法操作:String getMessage()获取异常信息;toString()异常名称:异常信息;printStackTrace()异常名称:异常信息:异常出现位置,jvm就是在调用printStrackTrace()。

在函数上声明异常:便于提高安全性,让调用者进行处理,不处理编译失败。

声明异常时,建议声明具体的异常,这样处理的可以更具体。对于声明几个异常,就对应有几个catch块,不要定义多余的catch块,如果多个catch块中的异常出现继承关系,父类异常catch块放在最下面。

在子父类覆盖时,子类抛出的异常必须是父类的异常的子类或者子集;如果父类或者接口没有异常抛出,子类覆盖出现异常,只能try,不能抛。

7.throws和throw的区别

throws使用在函数上,throw使用在函数内。

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

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

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

8.Exception中的一个特殊的子类异常RuntimeException运行时异常

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

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

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

9.自定义异常

定义类继承Exception或者RuntimeException:让该类具有可抛性,具备操作异常的共性方法。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值