------- 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:让该类具有可抛性,具备操作异常的共性方法。