目录
一、面对对象程序设计的特点
主要包括:抽象、封装、继承和多态
1、封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
2、继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。java支持多重继承【一层一层的继承】但不支持多继承【一个类直接继承很多父类】。 Java中继承的关键字是extends,子类的直接父类是该子类所继承的类。间接子类是从类层次结构的高层上继承的类,比如说有A,B,C三个类。A继承B,B继承C。那么B就是C的直接子类,A就是C的间接子类
3、多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
4. 抽象类:必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰。抽象类默认的权限修饰符为 public,可以定义为 public 或 procted,如果定义为 private,那么子类则无法继承。抽象类不能创建对象
(附:抽象类和普通类的区别:
- 抽象类必须用public、procted 修饰(如果为private修饰,那么子类则无法继承,也就无法实现其抽象方法)。默认缺省为 public
- 抽象类无法创建对象
- 如果一个子类继承抽象类,那么必须实现其所有的抽象方法。如果有未实现的抽象方法,那么必须定义为 abstract
)
二、类与类之间的关系
6种关系分别是:泛化(Generalization)
,实现(Realization)
,关联(Association)
,聚合(Aggregation)
,组合(Composition)
,依赖(Dependency)
。
各种关系的强弱顺序: 泛化(继承is-a) = 实现(接口实现like a) > 组合 > 聚合 > 关联 > 依赖
三、权限修饰符
四、is-a与has-a的区别
is-a代表类之间的继承关系,has-a代表对象和它成员间的从属关系
如:三角形、正方形均为几何图形,三角形、正方形关于几何图形的关系即为is-a;
CPU,硬盘均为电脑的里的组成成分,则他们与电脑的关系即为has-a。
五、Java垃圾回收机制
1、不可能再被任何途径使用的对象才会被视为垃圾回收;每个对象的finalize()方法只会被系统自动调用一次;
2、每个Java类均有一个 finalize方法,该方法没有参数和返回值。在从内存中删除一个对
象之前,垃圾收集程序将调用该方法;
3、Java自动地执行内存的垃圾收集,即垃圾回收线程可以每隔一定时间自动调用
finalize方法释放无用实例的内存空间;
4、System类的public静态方法gc建议垃圾收集程序立即尽最大努力收集垃圾对象,垃
圾收集程序不能确保对象的收集次序。
(补充:
gc()方法
其实java我们提供了自动的垃圾请理机制,能不定期地释放java中的垃圾空间
.gc方法就是位于Runtime类中的,是java为我们提供的手动收集垃圾对象的方法,在需要立马对垃圾对象进行请理时,就能直接调用它来清理。
)
六、接口
接口中的变量隐式的使用 public static final 修饰,并且需要给出初始值。方法隐式的使用 public abstract 修饰(即无效自己写,系统默认为public abstract;并且只能是 public ,如果是 private,procted,那么就编译报错)。接口中的方法默认不能有具体的实现(JDK1.8开始可以有默认的实现)
接口和抽象类的区别
- 抽象类只能继承一次,但是可以实现多个接口
- 接口和抽象类必须实现其中所有的方法,抽象类中如果有未实现的抽象方法,那么子类也需要定义为抽象类。抽象类中可以有非抽象的方法
- 接口中的变量必须用 public static final 修饰,并且需要给出初始值。所以实现类不能重新定义,也不能改变其值。
- 接口中的方法默认是 public abstract,也只能是这个类型。不能是 static,接口中的方法也不允许子类覆写,抽象类中允许有static 的方法
七、异常
程序错误分为三种:1.编译错误;2.运行时错误;3.逻辑错误。
1.编译错误是因为程序没有遵循语法规则,编译程序能够自己发现并且提示我们错误的原因和位置,这个也是大家在刚接触编程语言最常遇到的问题。
2.运行时错误是因为程序在执行时,运行环境发现了不能执行的操作。
3.逻辑错误是因为程序没有按照预期的逻辑顺序执行。
异常也就是指程序运行时发生错误,而异常处理就是对这些错误进行处理和控制。
异常的结构
查看常见的异常
八、Java输入输出流
字节输入输出流抽象类:
InputStream: InputStream 类是抽象类,不能通过new关键字来创建该实例对象,需要其子类创建该实例对象。
OutputStream: 和InputStream类一样,OutputStream 类是抽象类,不能通过new关键字来创建该实例对象,需要其子类创建该实例对象。
文件字节输入输出流类:
FileInputStream类,文件字节输入流类:和InputStream类一样,OutputStream 类是抽象类,不能通过new关键字来创建该实例对象,需要其子类创建该实例对象。
FileInputStream类:和InputStream类一样,OutputStream 类是抽象类,不能通过new关键字来创建该实例对象,需要其子类创建该实例对象。
字符输入输出流:
字符输入Reader类:字符输入输出流 与 字节输入输出流有相同的功能,但传送数据的方式不一样,字节流以字节为单位传送数据,可以使任何类型的数据,例如文本、音频、视频、图片等。字符流以字符为单位传送数据,只能传送文本类型的数据。使用字符输入输出流的好处是,当读取中文时不会出现乱码问题,而使用字节输入输出流时,却不能保证这一点。
字符输出流Writer类:Writer 类主要是用于解决字符输入流的类,其地位与Reader类在输入流的地位和作用是相同的,也是所有字符输出流的流类。
文件字符输入输出流:
文件字符输入流FileReader: 文件字符输入流与文件字节输入流的功能相似,但是传送数据的方式不一样,字节流以字节为单位传送数据,可以使文本、视频、音频、图片等。字符流以字符为单位传送数据,只能传送文本类型的数据。
文件字符输出流FileWriter: 文件字符输出流继承自Writer类,提供了向文件输出的各种方法,数据通过文件字符输出流以字符为单位输出并保存到文件中。
九、面向对象设计模式分类及其特点
总体来说设计模式分为三大类:创建型模式、结构型模式、行为型模式。
创建型模式:
共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
创建型模式是用来创建对象的模式,抽象了实例化的过程,帮助一个系统独立于其他关联对象的创建、组合和表示方式。所有的创建型模式都有两个主要功能:
1.将系统所使用的具体类的信息封装起来
2.隐藏类的实例是如何被创建和组织的。外界对于这些对象只知道他们共同的接口,而不清楚其具体的实现细节。
正因为以上两点,创建型模式在创建什么(what)、由谁来创建(who)、以及何时创建(when)这些方面,都为设计者提供了尽可能大的灵活性。
结构型模式:
共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
结构型模式讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象实现新的功能(对象结构型模式)。这些结构型模式在某些方面具有很大的相似性,但侧重点各有不同。
行为型模式:
共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
行为型设计模式关注的是对象的行为,用来解决对象之间的联系问题。
十、Java上转型对象的特点
上转型对象不能操作子类新增的成员变量(失掉了这部分属性);不能使用子类新增的方法(失掉了一些功能)。
上转型对象可以操作子类继承或者隐藏的成员变量,也可以使用子类继承的或者重写的方法。上转型对象操作子类继承或重写的方法,其作用等价于子类对象去调用这些方法。因此,如果子类重写了父类的某个方法,则当对象的上转型对象调用这个方法时一定是调用了这个重写的方法