黑马程序员——学习日志6面向对象(多态,内部类,异常,访问权限)
来源:互联网 发布:股票数据查询 编辑:程序博客网 时间:2024/06/05 18:18
------- android培训、java培训、期待与您交流! ----------
1、多态
可以理解为事物存在的多种体现形态。
多态的体现:父类或者接口的引用指向或者接受自己的子类对象
多态的好处和作用:提高了程序的扩展性和后期可维护性
前提:需要继承或者实现关系,需要覆盖操作。
弊端:只能使用父类的引用访问父类中的成员
向上转型:把一个子类当做父类来用是可以的,因为父类有的子类都有;把一个父类当做子类来用就不可以了,因为子类有的父类不一定有;可以定义一个父类类型的变量来记住子类对象,这在程序中称之为向上转型
强制类型转换:把一个子类当做父类来用的时候,不能调用子类特有方法。因为编译时编译器会做语法检查,看到变量是父类类型那么就会到父类中查找是否有该方法,没有则报错。这种情况下,就需要强制类型转换,将父类类型强转成子类类型。以(子类名)变量名形式进行强制类型转换;强制类型转换时,无论类型是否匹配编译都不会报错,但如果类型不匹配运行会报错,我们可以使用instanceof进行判断,编译时预知错误
多态的特点:成员函数在编译时:要查看引用变量所属的类中是否有所调用的成员。在运行时:要查看对象所属的类中是否有所调用的成员。简单来说:成员函数在多态调用时,编译看左边,运行看右边。
在多态中成员变量的特点:无论编译和运行都参考左边(引用型变量所属的类)。
在多态中静态函数的特点:无论编译和运行,都参考左边。只要引用在,就找引用型变量所属类中的内容。静态方法一进内存就已经绑定在该方法所属的类上了。
2、Object类
Object:是所有对象的直接或者间接父类,是一个超类,该类中定义的肯定是所有对象都具备的功能。Object类中已经提供了对对象是否相同的比较方法,如果自定义类中也有比较相同的功能,没必要重新定义,只要沿袭父类中的功能,建立自己特有的比较内容即可,这就是覆盖。java认为所有对象都具备比较性,该方法equals定义在Object中。
3、内部类
在类里面定义的类称之为内部类,内部类是外部类的一个成员。
内部类必须创建外部类对象才能使用。
创建内部类对象时必须先创建一个外部类对象,通过一个外部类对象才能创建内部类对象。
外部类名.内部类名变量名 = new 外部类名().new 内部类名();
内部类可以直接访问外部类的成员,而外部类不能直接访问内部类的成员。访问方式:外部类名.this.成员名
内部类可以访问外部类成员,因为在使用内部类时一定会有外部类对象,且只对应一个。
外部类不能访问内部类成员,因为在使用外部类时有可能还没有创建内部类对象。
如果一定要在外部类中使用内部类成员,那么需要创建内部类对象,通过对象来访问。
内部类中不能定义静态成员。内部类可以被private、static修饰,被static修饰的内部类只能访问外部类中的静态成员
因为内部类需要创建外部类对象才能使用,static的本意是不创建对象就能使用,这是矛盾的。
内部类的class文件名为:外部类名.内部类名.class
内部类定义在局部位置上:不可以被成员修饰符修饰,也可以直接访问外部类中的成员;同时可以访问所在局部中的局部变量,但必须是被final修饰的。
4、匿名内部类
如果一个类只使用一次,那么可以定义为匿名内部类。
匿名内部类其实就是内部类的简写形式。
定义匿名内部类的前提:内部类必须是继承一个类或者实现接口。
格式:new 父类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)}
匿名内部类的class文件名为:外部类名$编号.class
什么时候使用匿名内部类呢?通常在使用方法是接口类型参数,并该接口中的方法不超过三个时,可以将匿名内部类作为参数传递。增强阅读性。
5、异常
异常就是Java程序在运行过程中出现的错误。Java在设计异常体系时,将容易出现的情况都封装成了对象。对于严重的问题,java通过Error类进行描述,不编写代码对其处理;对于非严重的,java通过Exception类进行描述。
6、Throwable
Throwable表示Java中可被抛出的对象,它是所有错误和异常的父类;有两个子类:Error、Exception;Error表示错误,Exception表示异常;RuntimeException表示运行时异常,是Exception的子类
7、异常处理
try
{
需要检测的代码;
}
catch(异常类 变量)
{
异常处理代码;
}
finally
{
一定会执行的代码;
}
Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。
处理过程:
Try中检测到异常会将异常对象传递给catch,catch捕获到异常进行处理。
Finally里通常用来关闭资源。比如:数据库资源,IO资源等。
需要注意:try是一个独立的代码块,在其中定义的变量只在该变量块中有效。
如果在try以外继续使用,需要在try建立引用。在try对其进行初始化。如果父类方法中声明抛出多个异常,那么重写(覆盖)该方法只能抛出那些异常的一个子集,也就是说子类不能比父类抛出更多的异常。
8、自定义异常
自定义类继承Exception或者其子类。通过构造函数定义异常信息。通过throw将自定义异常抛出。
9、throw和throws
thorws用在函数上,后面跟异常类名。
throw用在函数内,后面跟异常对象。
10、异常细节
Exception中有一个特殊的子类异常RuntimeException 运行时异常。如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。如果在函数上声明了该异常,调用者可以不用进行处理,编译一样通过。之所以不用在函数上声明,是因为不需要让调用者处理,当该异常发生,希望程序停止,因为在运行时,出现了无法继续运算的情况,希望停止程序后,对代码进行修正。自定义异常时:如果该异常的发生,无法再继续进行运算时,就让自定义异常继承RuntimeException。
异常有两种:编译时被检测异常:该异常在编译时,如果没有处理,那么编译失败;该异常被标识,代表可以被处理。运行时异常(编译时不检测):在编译时,不需要处理,编译器不检查;该异常的发生,建议不处理,让程序停止,需要对代码进行修正。
11、包 package
对类文件进行分类管理,给类提供多层命名空间,写在程序文件的第一行,类名的全称的是 包名.类名,包也是一种封装形式。
包的出现可以让类文件和java的源文件相分离,可以很方便地只将类文件提供给别人使用。
包之间的访问:被访问的包中的类权限必须是public的,类中的成员权限:public或者protected,protected是为其他包中的子类提供的一种权限
12、import
简化类名。import packb.*;为导入包中所有的类,尽量不要写通配符*,需要用到哪个类就导入哪个类,都导进来比较占内存
无包的类可以使用有包的类,有包的类不能使用无包的类;导入指定一个类。无论当前包中是否有同名类,都直接匹配导入的类
13、jar包
jar文件是Java文件的一种压缩格式,一般来讲,我们会将一个软件系统的所有class文件打成一个jar文件以供别人使用,当我们用到jar包中的类时,需要将jar文件的绝对路径加到classpath当中
------- android培训、java培训、期待与您交流! ----------
- 黑马程序员——学习日志6面向对象(多态,内部类,异常,访问权限)
- 黑马程序员--面向对象学习---接口、多态、内部类、异常
- 黑马程序员——面向对象(多态,内部类、异常、包)
- 黑马程序员--Java学习笔记之面向对象思想(多态、内部类、匿名内部类、异常类)
- 黑马程序员——>第九天<面向对象(内部类-匿名内部类-异常)>
- 黑马程序员 java学习笔记——面向对象3:多态(含内部类)
- 黑马程序员——第9天——(面向对象)内部类,异常
- 黑马程序员——006——面向对象③(内部类、异常)
- 黑马程序员---Java基础---面向对象:多态、内部类、异常
- 黑马程序员——第九天(Java面向对象-内部类-异常)
- 黑马程序员—java面向对象总结(4)—内部类、异常
- 黑马程序员——java第九、十天:面向对象(内部类、异常和包)
- 黑马程序员——面向对象09(内部类、异常上)
- 黑马程序员_JAVA笔记09—面向对象5(内部类、异常)
- 黑马程序员-面向对象(下)--内部类和异常
- 黑马程序员——面向对象、内部类、多态
- 黑马程序员——面向对象(二)---类的继承、多态性、匿名内部类、异常、包、访问控制、命名规范、jar文件
- 黑马程序员-----面向对象_内部类(学习日记)
- spark 利用hdfs与本地文件系统的时间比较
- Mac 设置path
- JAVA调用支付宝直充接口
- 判断DATASET是否为空
- 驻衡阳某军械仓库发生爆炸事故 17名官兵遇难
- 黑马程序员——学习日志6面向对象(多态,内部类,异常,访问权限)
- 百度文库实现方案 openoffice.org 3 + swftools+flexpaper+java
- 11g Rac 切换
- java短信接口调用
- tcpdump网络抓包工具
- Software - Alitum Designer 14 安装
- HttpComponents入门解析
- HTTP协议详解
- STL用法总结