javaSE 重难点掌握
一、面向对象OOP
1、面向对象 思想
打架:面向过程:
面向对象: 打手(对象:封装了内部细节--》 数据, 功能)
能够打架--》 类
张三 --》 对象
三大特性: 封装、继承、多态
封装:封装了内部细节,保护自身数据的安全
继承:在原有的基础之上进行延续, 扩展
多态:子类对象以父类身份出现, 最终以子类自己的方法来执行
2、语法:
2.1、封装:权限修饰符
修饰类: public-》任何地方都能使用
default(不写) --》 只能在本包下使用
修饰成员:
public : 所有
default : 本包
protected : 所有子类
private : 本类自己
2.2、继承 extends
类与类:继承 extends 单继承
接口与接口:继承 extends 多继承
子类继承父类以后自动拥有了父类的所有内容(除了构造器)
2.3、多态 : 继承、重写、父类引用指向子类对象 (子类新增方法对父类不可见)
做题思路:编译看类型,运行看对象 作用:提高代码的重用性
苹果是苹果-----》子类是子类
苹果是水果-----》子类是父类(子类继承了父类的所有 包括私有属性 )
水果不是苹果---》父类对子类新增方法不可见
苹果不是香蕉---》
多态之---做题四大原则
1>、继承链,自己没有找父亲
2>、编译看类型+正确方法表 运行看结果
3>、就近最优原则:自己没有找父亲
4>、发生多态,基类
3、class 类名{
// 属性类型 属性名称
int a;
// 方法 -》 返回值类型 方法名(参数类型 参数名称){}
void|Object fun(int a){
}
}
3.1 重写:按需重写(当父类方法不能满足子类的需求的时候, 子类自己重写父类的方法)
3.2 抽象类:实现了部分功能的类, 里边可能包含抽象方法 abstract
抽象类中一定有抽象方法? 不一定
抽象方法一定在抽象类当中?对 有抽象方法的类一定是抽象类? 是的
3.3 接口: 特殊的抽象, 只有抽象方法
子类在实现接口或者继承抽象类时, 必须重写其中的所有抽象方法,
只要在继承链上有任何一个地方实现了抽象方法, 后期就可以不用再次实现了
接口和抽象类不能实例化对象
3.4 block
运行顺序:静态代码块---->main方法---->构造代码块---->构造器
代码块:位置---》 类中方法外
格式---》{ }
构造方法: 修饰权限 方法名(){
}
Constructor 构造方法
1、名称与类名一样
2、没有返回类型
3、外部不能直接调用 都会和new 一起由系统调用
4、没有显示提供任何构造方法时, 系统会提供一个默认的构造方法
5、构造方法不能被static、final修饰
Setter 和 Getter
取名必须规范
set+属性名首字母大写、 get+属性名首字母大写
boolean类型
is+属性名首字母大写 、 get+属性名首字母大写
4、常见关键字:
this: 当前对象
1、区分局部变量和成员属性,避免就近原则
2、在本类中调用本类的方法
3、调用构造器 (只能在第一行)
4、非静态方法中, 作为隐士参数传入
super: 父类对象
1、调用父类构造器(只能在第一行)
2、调用父类的方法、属性(作区分)
class: 新建类的关键
static: 方法、属性: 表示共享和跟随类的存在而存在;
final:最终的
类: 该类不能被继承
方法:该方法不能被重写
属性:常量
局部变量: 常量
void: 没有返回值 (返回值类型为void的方法中,
可以有return语句, 但是return 后面不能带数据)
一个方法的返回值类型不是void, 方法体中必须有return 语句, 而且一定需要带上数据
return:
1)返回数据
2)提前结束方法
return语句后不能有其他语句
abstract: 抽象的
类
方法
interface: 定义接口的关键字
implements: 实现
extends:继承
break: 跳出循环, 结束本层循环
continue: 跳出循环, 结束本次循环, 继续下一次循环
instanceOf: 判断一个对象是否是一个类或者其父类的实体
synchronized: 同步、加锁
Object obj = new Object();
obj instanceOf Object
5、 权限修饰符:
public : 所有 (一览无遗)------------》在任何地方
protected : 所有子类 (子承父业)----》在不同包下
default : 本包 (家庭和睦)--------------》在同一个包下
private : 本类自己 (占为己有)------------》在同一个类中
常见方法:
toString():
equals(): 按需比较两个对象是否相等
hashCode(): 默认比较两个对象的hash值是否相等, 按需重写, 容器中去重使用
clone(): 克隆出来以后的两个对象不是同一个对象, 但是是两个属性都相同的对象
1、重写clone方法, 扩大权限
2、实现Cloneable 接口
wait():等待,让出资源,放弃排它锁
yield():互相礼让, 公平竞争
notify():唤醒
二、容器 (使用)
1、 变量:容器可以存储多个数据
变量: 单个数据
Collection extends Iterable:
1》、存储多个数据
2》、可以存储不同类型的数据
3?、只能存储引用类型
2、 增、删、改、查 (遍历)
底层基础决定上层建筑
2.1 List: 有顺序并且可重复(可以存放相同数据的对象, 还可以将一个对象存放多次)
ArrayList: 数组
LinkedList: 链表
2.2 Set: 无序不可重复(内部通过hashCode和equals进行比较的,根据前面两个方法判断是否是同一个对象 )
HashSet:
2.3 容器的遍历:
2.3.1 Iterable -》 迭代器
Iterator iterator();
hasNext();
next();
2.3.2 foreach-》增强for循环
for(类型 临时变量:容器){
临时变量
}
2.3.3 有序的 List可以使用普通for循环
3、 Map<key, value> -》 存储一对一对的数据
4、 HashMap -> 实现类
增、删、改、查
4.1 键:无序不可重复的
4.2 值:无所谓
4.3 遍历:
4.3.1 根据key来遍历 -》 同时获取 key 和value
keySet() + get(key)
遍历key通过每一个key获取对应value
4.3.2 直接获取value值 -》 只能获取value
values() -》 将所有的value值放入Collection中
通过遍历存有所有value的Collection来获取所有的value
4.3.3 通过Entry来遍历
entrySet() -》 存有所有键值对Set集合
遍历该Set获取单个 Entry对象
getValue() -》 获取value值
getKey() -》 key值
wf_1224