##Java SE阶段知识点以及思维导图
面向对象
【知识点思维导图已经上传到我的资源去啦!!!也可以点这个链接https://download.youkuaiyun.com/download/luminarysun/15113850】
1.面向对象是啥
1.1程序设计的思想
1.2面向过程的区别
1.2.1面向过程先考虑问题的解决流程,注意先后顺序
1.2.2面向对象先把问题中涉及到的概念,先用对象表示出来,在统筹流程
1.3类和对象的理解
1.3.1类是图纸,对象是根据图纸盖出来的房子
1.3.2类是自定义类型,对象是该类型创建出来的变量
2.基本语法
2.1类的创建
2.1.1class 关键字
2.1.2类名一般要求首字母大写
如果这个类是public修饰的,类名要和文件名一致
2.1.3类内部可以有属性,也可以有方法
2.1.4每个属性和方法,都可以加static,以及其他的访问权限控制的修饰符
2.2对象的创建/类的实例化
2.2.1使用new关键字进行
2.2.2实例化一个对象的时候
会给该实例分配内存空间
针对该实例进行初始化
把得到的实例的内存的地址,返回回去,使用一个引用来持有
3.static
3.1static 的含义和字面意义没有任何关系
3.2static 表示该属性或者该方法,和实例无关,而是和类相关
3.2.1应该是通过类名.属性 的方式来访问
3.2.2static 修饰的属性在内存中只有一份
4.对象的初始化
4.1类属性的默认值
4.1.1针对整数
0
4.1.2针对浮点数
0.0
4.1.3针对字符
\u000
4.1.4针对 boolen
false
4.1.5针对引用类型
null
4.1.6尽量显示的进行初始化,代码可读性更好一些。
4.2就地初始化
4.3构造代码块
4.4构造方法
4.4.1概念
方法名字和类名相同
不需要显式的写 return
不需要显式调用,new的时候自动被调用到
4.4.2重要注意事项
构造方法中,尽量不要调用其他的方法,尤其是可能被重写的方法
要让对象尽快的进入到可工作的状态
5.toString
5.1在进行 println 的时候,就会触发这个操作
5.2Object 类的方法
任何一个类都可以重写 toString
6.封装
6.1背景
6.1.1管理程序的复杂程度
6.1.2让调用者理解的细节越少,使用成本就越低
6.2访问权限控制
6.2.1public
任何类都能访问
6.2.2protected
同包的类能访问
其他包的子类能访问
6.2.3default
同包的类能访问
6.2.4private
类内部能访问
6.3使用原则
能用private尽量用private
protected 和 default 用的相对较少
6.4如果外部真的需要使用 private 的属性怎么办?
6.4.1getter
6.4.2setter
6.4.3和封装的理念相悖,破坏了封装
7.继承
7.1背景
更好的代码重用(以类为单位)
7.2语法
7.2.1extends关键字
7.2.2子类会继承父类所有的方法和属性
哪怕这个属性是私有的属性,也是被继承到了
7.2.3final
禁止继承
继承的体系不要太复杂
7.3is-a 语义
继承不能被滥用
8.组合
8.1把类作为另外类的成员/属性
8.2has-a语义
9.多态
9.1背景
封装的更近一步
使用者不需要知道具体的类型,也能完成使用
9.2好处
使用者了解的信息更少,不需要知道类型
扩展更方便
降低程序的圈复杂度,减少分支语句的数目
9.3语法体现
9.3.1向上转型
9.3.2动态绑定
9.3.3方法重写
9.4补充语法
9.4.1向下转型
不是随便转的
instanceof
9.4.2抽象类
不能实例化
可以包含抽象方法
可以包含一些普通的属性和方法
抽象类能被单继承
9.4.3接口
只能包含抽象方法和 public static final 修饰的属性
一个可以实现多个接口
接口之间也能相互继承
实现一个接口,就必须要把接口里面的抽象方法都实现出来
10.String
10.1创建
10.1.1String s = "hello"
没有创建新的对象,只是拿 s 引用指向了字符串常量池中的 “hello”
10.1.2String s = new String("hello");
一个新的String 对象,把“hello”拷贝了进去,引用指向了这个新对象
10.2比较
10.2.1 ==
比较身份
10.2.2equals
比较内容
equals也是Object 的方法
默认就是比较身份
10.2.3compareTo
比较大小
字典序
10.3字符串常量池
字符串字面值常量都是保存到常量池中
常量池是堆上的一块内存区域
后续如果需要用到同一个字符串常量,直接从池子里取即可,不需要重新创建对象
10.4不可变对象
10.4.1数据成员是private,并且没有提供public的方法来修改
10.4.2常规手段不能修改,如果使用反射,也是能改的
10.4.3好处
更方便放到常量池中
线程安全更有保证
hashCode不变
10.5常用操作
比较
查找
替换
截取子串
切分
10.6StringBuilder/StringBuffer
String的可变对象版本
StringBuilder 和StringBuffer的区别
11.异常
11.1目的
防御式编程
11.2基本语法
11.2.1try
11.2.2catch
try中抛出的异常需要和catch ()中的参数匹配
catch可以分成多组
11.2.3finally
最后执行,收尾工作
11.2.4throw
主动抛出异常
11.2.5throws
声明该方法可能抛出哪些异常
11.3异常体系
11.3.1角度一
Errow
Exception
11.3.2角度二
受查异常
非受查异常
11.4自定义异常