第三章:面向对象
1.面向对象怎么理解?
与面向过程的区别:耦合度高低,扩展力强弱
面向对象 就是将现实世界中的所有东西都可以看成对象,就是“万物皆对象”
以及三大特征:封装,继承和多态
2.类和对象
2.1什么是类
类是现实世界不存在的,是一个模板,一个概念,将对象与对象之间的共同特征进行抽象,而总结出的一个模板。
2.2什么是对象
对象是现实中实际存在的个体
类---(实例化)--->对象(又称为实例/Instance)
对象---(抽象)---->类
3.类怎么定义
【修饰符列表】 class 类名 extends 父对象名称 implements 接口名称{
类体:属性和方法组成
}
4.对象怎么创建
使用new创建
5.属性怎么访问
6.方法怎么访问
7.理解JVM内存管理
8.new出来的对象存储在哪里?局部变量存在哪里?实例变量存在哪里?静态变量存储在哪里?
分别存储在栈、堆、方法区
9.什么是栈内存?什么是堆内存?什么是方法区?每个内存空间存储什么数据?
1.堆
解决对象实例存储的问题,垃圾回收器的主要的管理区域,被所有线程共享。
2.方法区
存储已被虚拟机加载的信息、常量、静态变量(即编译器编译后的代码),被所有线程共享。
3.栈
栈解决的是程序运行时的问题,存的是栈帧,栈帧里面存的是局部变量
10.空指针异常
空引用访问实例相关的数据会导致的
可能的原因:
初始化对象为null
变量为空,没有去判断
修改对象的不存在的属性或者方法
解决办法
1.String.valueOf()方法代替toString方法
2.判断是否为空
3.进行equals比较时,常量放前面。
11.封装,继承和多态
封装: 1.封装之后才是真正的对象,真正的独立体
2.复杂性封装,对外提供简单的操作入口
3.安全性
4.复用性
继承: 基本作用:代码复用
重要作用:有了继承,才有了方法的覆盖,和多态机制
多态: 作用:降低程序耦合度,提高程序扩展力
12.构造方法constructor
作用:
1.创建对象
2.创建对象的同时,初始化实例变量的内存空间
怎么调用:new 构造方法名(实参列表)
1.带static的时候:类名.方法名(实参列表)
2.不带static的时候:引用.方法名(实参列表)
13.this关键字
指的就是当前对象
1.是一个引用,一个变量,this变量中的内存地址指向了自身,this存储在java堆内存java对象的内部
2.this可以出现在实例方法中,代表当前对象
3.多数情况可以省略不写
4.不能出现在带有static的方法中
14.static关键字
可以修饰变量、方法、代码块
1.其修饰的变量和方法,可以采用类名直接访问
2.其修饰的代码块为静态代码块,jvm加载类的时候会执行静态代码块中的内容
方法什么时候定义为静态?
当对象执行方法的时候产生的影响是一样的,那么这个方法以及不再属于某个对象了,就可以将其提升至类级别的动作,
15.super关键字和final关键字
final
1.修饰的类无法继承
2.修饰的方法无法覆盖
3.修饰的变量只能赋一次值
4.修饰的引用一旦指向某个对象,则不能再指向其他对象,但该引用指向的对象内部的数据可以修改
5.修饰的实例变量必须手动初始化,不能采用系统默认值
6.一般和static联合使用,称为常量
super
1.可以出现在实例和构造方法中
2.语法"super.属性名/方法名" 表示访问父类属性名/方法名
"super(实参)":调用父类的构造方法,只能出现在构造方法的第一行目的是创建子类对象的时候先初始化父类特征
3.不能出现在静态方法
4.大部分情况不能省略
子类和父类中有同名属性。或者说有同样的方法,想在子类中访问父类的,就不能省略。
16.方法的覆盖(重写)
什么时候重载:
在同一个类当中,方法的功能类似,建议方法名相同,方便编程,就像调用一个方法,程序 美观
什么时候重写:
在父子类当中,父类的方法不满足子类的业务需求,当前子类就有必要重写父类的方法
重写:发生在父子类
1.方法名必须相同
2.参数列表必须相同
3.访问控制符可以被扩大,不能被缩小
4.抛出异常可以被缩小,不能被扩大
4.父类中静态方法和私有方法不能被子类重写
重载:发生在本类
1. 方法的名字必须相同
2. 方法的参数列表必须不同
参数的类型不同
参数的个数不同
参数的顺序不同
3. 方法的修饰符、返回类型、抛出异常这些地方没有限制(可以相同,也可以不同,但一 般都是相同的)
17.抽象类
1.抽象类无法实例化,是用来被子类继承的
2.子类可以是抽象类,也可以是非抽象类
3.抽象类有构造方法
4.抽象类不一定有抽象方法,抽象方法必须出现在抽象类中
5.一个非抽象的类,继承抽象类,必须将抽象类中的方法进行覆盖
18.接口
1.接口是引用数据类型
2.完全抽象
3.支持多继承
4.只有常量和抽象方法
5.所有的元素都是public修饰
6.抽象方法的 public abstract可以省略
7.常量的public static final可以省略
8.接口中不能有方法体
接口的作用:
降低程序耦合度,提高程序扩展力,接口的使用离不开多态(接口+多态才能达到降耦合度)
抽象类和接口的区别:
1.抽象类半抽象,接口完全抽象
2.抽象类有构造方法,接口没有构造方法
3.类和类之间单继承,接口和接口支持多继承
4.一个类可以实现多个接口,一个抽象类只能继承一个类
5.接口中只能出现常量和抽象方法
19.Object类中常用方法
20.内部类(重点掌握匿名内部类)
1.匿名内部类是局部内部类的一种,因为没有名字所以叫做匿名内部类
2.但是不建议使用
缺点1:复杂,可读性差
缺点2:不能重复使用(因为没有名字)
...



