文章目录
面向对象与面向过程
面向对象:当今软件开发的主流方法之一。它是将数据与操作放在一起,作为一个整体,即对象。对同类对象抽象出其共性,即类。
面向过程:一个以事件为中心的开发方法。自顶向下执行,逐步求精,各功能模块之间功能独立,内部有顺序、选择和循环3种基本结构组成。
不同点
- 出发点:面向对象方法是用符合常规思维方法来处理客观世界的问题,强调把问题域的要领直接映射到对象及其对象之间的接口上。面向过程方法强调过程的抽象化与模块化,以过程为中心来构造和处理客观世界的问题。
- 层次逻辑关系:面向对象方法是用计算机逻辑来模拟客观世界存在的事物,以使问题的处理更加清晰和直接;面向过程方法是把客观世界的问题抽象成计算机可以处理的过程。
- 数据处理方式与控制程序的方式:面向对象方法将数据和对应的处理方法作为一个整体,原则上对象的修改只能由自身的成员函数完成,控制程序的方式是通过类似“事件驱动”的方式。面向过程的方法时直接通过程序来处理数据并获取结果,控制程序的方式则是通过设计来调用。
面向对象的特征
- 抽象 :忽略主体中与当前问题无关的部分,抽象出重要的部分
- 继承:一个类可以从旧的类中派生,并获取它的基类的方法和实例变量
- 封装:只将模块中需要暴露的部分暴露给外界
- 多态:允许不同类的对象对同一消息响应。
面向对象的开发优点
- 较高的开发效率
- 保证软件的鲁棒性
- 保证软件的高可维护性
重载(overload)和覆盖(override)
是java多态性的不同表现方式
重载注意项
- 重载是通过不同的方法参数来区分,如不同的参数个数、参数类型和参数顺序
- 不能通过方法的访问权限、范围值类型和抛出的异常类型来重载
覆盖注意项
- 发生在继承中
- 与基类的原方法有相同的函数名、参数和返回值
- 与基类的原方法所抛出的异常一致
- 基类中想要覆盖的方法不能为private,否则派生类中相同的方法就是新的一个方法
重载与覆盖的区别
- 覆盖是子类与父类之间,重载是同一个类之间
- 覆盖影响的是一个方法,重载影响的是多个方法
- 覆盖中,调用方法体是根据对象类型来决定;重载中,调用的方法体是根据参数列表来决定
抽象类与接口
相同点
- 都不能被实例化
- 实现类或继承类都需要实现声明的方法才能被实例化
不同点
- 一个类可以实现多个接口,但只能继承一个抽象类
- 抽象类可以自己实现方法,接口自java 8之后才能有默认方法(default)
内部类
主要有四种:
class outClass{
// 静态内部类
static class innerClass{ }
// 成员内部类
class innerClass2{ }
public void test(){
// 局部内部类
class innerClass3{ }
// 匿名内部类
new Runable(){
public void run(){ }
}
}
}
非静态内部类不能有静态成员
匿名类的注意事项:
- 匿名内部类不能有构造函数
- 匿名内部类不能定义静态成员、方法和类
- 匿名内部类不能被public、protected、private、static修饰
- 只能创建匿名内部类的一个实例
- 一个匿名内部类一定是再new的后面,这个匿名类必须继承一个父类或实现一个接口
- 匿名内部类也是局部内部类
获取父类的类名
通过java的反射机制,使用 getClass().getSuperClass().getName()
来获取父类的名字
而获取当前类的类名则是:getClass().getName()
final、finally和finalize的区别
final
- 用于声明属性,表示属性不可变(基本类型不可变值、引用类型不可变引用地址)
- 用于声明方法,表示方法不能覆盖
- 用于声明类,表示类不可继承
finally
- 作为异常处理的一部分
- 当在finally之前调用
System.exit(0)
, finally 不被执行 - 当finally前面出现死循环,finally不被执行
- 当线程被杀死,finally不会执行
finalize
在垃圾回收器准备释放对象占用空间时,首先调用对象的finalize() 方法,然后才会真正回收占用的空间
volatile关键字
为了提高程序的运行效率,java编译器会自动对其优化,把经常被访问的变量缓存起来,程序在读取这个变量时有可能会直接从缓存中读取这个值,而不去内存中读取。
设计的优点:提高程序运行效率
设计的缺点:多线程编程时,数据可能会不一致。
而被volatile修饰的变量,将不会做这样的优化,每次都从内存读取值。
stricfp关键字
用来确保浮点数运算的准确性
可用来修饰一个类、接口和方法,在声明的范围内,java编译器及运行环境会完全依照IEEE二进制浮点数算术标准来执行。