面向对象最早70年代IBM的smalltalk
面向过程:针对于某一个问题单独提出解决方案以及代码开发
面向对象:以一种组件化的形式进行代码的设计。这样开发出来的代码最大的好处是可以复用(组件化的设计思想)
面向对象程序里面包含的几个特征:
- 封装性:保护内部的定义结构安全
- 继承性:在已有的程序结构上继续扩充新的功能
- 多态性:在某一个概念范围内的满足
面向对象开发分为步骤:
- OOA(面向对象分析)
- OOD(面向对象设计)
- OOP(面向对象编程)
类与对象
对象的定义格式有两种:
-
- 声明并实例化:类名称 对象名称 = new 类名称()
- 分步完成:
- 声明对象:类名称 对象名称 = null
- 实例化对象:对象名称 = new 类名称
引用数据类型与基本数据类型最大的不同在于内存的关系
内存的开辟及使用:new关键字的主要功能就是开辟内存空间
即:只要是引用数据类型想使用,那么就必须使用new关键来开辟内存空间
当一个对象实例化后,可以利用对象来操作类的结构:
- 对象.属性:表示操作类中的属性内容
- 对象.方法():表示要调用类中的方法
内存空间的概念:
- 堆内存:保存每一个对象的属性内容。堆内存需要用关键字new才可以开辟
- 栈内存:保存的是一块堆内存的地址
开辟堆内存的对象称为实例化对象
使用没有实例化的对象,编译时不会报错。运行时会出现“NullPointerException”(空指向异常)
引用数据的初步分析
在引用数据类型关系里面,一块没有任何栈内存指向的堆内存空间就称为垃圾空间
所有的垃圾会不定期的被垃圾收集器(GC)进行回收,回收之后会释放掉其所占用的空间
虽然Java支持自动的垃圾收集处理,但是在开发过程中应该尽量减少垃圾空间的产生
封装性:
业务逻辑上的错误:造成此类问题的核心在于:对象可以在一个类的外部直接访问属性
设置属性对外不可见,用private,外部的对象无法再直接调用类中的属性了
关于setter方法和getter方法:
对于数据的验证部分,在标准开发中应该由其他的辅助代码完成。setter只是简单的设置数据,getter简单的获取数据
构造方法:
构造方法定义原则:方法名与类名称相同,没有返回值声明
构造方法与普通方法的最大区别:
- 构造方法是实例化新对象(new)的时候只调用一次
- 普通方法是在实例化对象之后可以随意调用多次
构造方法的核心作用:在类对象实例化的时候设置属性的初始化内容
构造方法是为属性初始化准备的
如果一个类中已经明确定义了一个构造方法,那么自动生成的无参的构造方法将不存在了
一个类中至少保留了有一个构造法
构造方法重载时,要求只注意参数的类型及个数
匿名对象:
没有栈指向的对象就称为匿名对象
匿名对象由于没有其他对象对其进行引用,所以只能使用一次,使用一次之后就等待被回收