java面向对象技术的学习笔记

面向对象与面向过程

面向对象:当今软件开发的主流方法之一。它是将数据与操作放在一起,作为一个整体,即对象。对同类对象抽象出其共性,即类。
面向过程:一个以事件为中心的开发方法。自顶向下执行,逐步求精,各功能模块之间功能独立,内部有顺序、选择和循环3种基本结构组成。

不同点

  1. 出发点:面向对象方法是用符合常规思维方法来处理客观世界的问题,强调把问题域的要领直接映射到对象及其对象之间的接口上。面向过程方法强调过程的抽象化与模块化,以过程为中心来构造和处理客观世界的问题。
  2. 层次逻辑关系:面向对象方法是用计算机逻辑来模拟客观世界存在的事物,以使问题的处理更加清晰和直接;面向过程方法是把客观世界的问题抽象成计算机可以处理的过程。
  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(){ }	
		}
	}
}

非静态内部类不能有静态成员
匿名类的注意事项:

  1. 匿名内部类不能有构造函数
  2. 匿名内部类不能定义静态成员、方法和类
  3. 匿名内部类不能被public、protected、private、static修饰
  4. 只能创建匿名内部类的一个实例
  5. 一个匿名内部类一定是再new的后面,这个匿名类必须继承一个父类或实现一个接口
  6. 匿名内部类也是局部内部类

获取父类的类名

通过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二进制浮点数算术标准来执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值