一 面向对象
- 类: 一组相关的属性和行为的集合
- 对象:该类事务的具体表现
- 三个特征: 封装,继承,多态
- 面向对象开发:不断地创造对象,使用对象,指挥对象做事情
- 面向对象设计: 对创造的对象进行管理和维护
二 JVM虚拟机
jvm主要分布有三块区域
- 堆heap:存放对象
- 栈stack:存放方法
- 方法区: 存放字节码文件
- 垃圾回收:如果堆里面的对象没有被指向,则自动回收
程序的执行顺序:
- 字节码文件加载到方法区
- 方法压栈
- 堆里面创建对象
- 将栈中的方法指向堆里面对象的地址
- 给成员变量赋值
- 方法弹栈
- 程序执行结束
三 封装
- 封装就是隐藏对象的属性和实现细节,仅对外提供公共访问方式
- 优点:隐藏代码的实现细节,提高安全性
- 对于封装,用private修饰成员变量,提供getset方法,private只是封装的一种形式,封装不是私有
四 构造方法与this关键字
- 构造方法的调用必须用this,并且this必须在第一行
- this代表当前对象的引用,this调用的属性是当前对象的属性
- 如果定义了有参构造,那么系统就不再提供默认的无参构造,在实例化的时候不允许创建无参对象。
五 static关键字与代码块
- static修饰的是静态变量,static修饰的方法叫静态方法,static修饰的代码块叫静态代码块
- 静态变量、静态方法、静态代码块属于类级别,与对象无关,所以不能使用this
- 静态代码块在类加载的时候就执行,顺序在构造方法之前
- 某一类物体如果被多个物体共享,比如WiFi,那么可以用static修饰
- 代码块执行顺序:
- 1 静态代码块:随着类的加载而执行,优先级最高
- 2 构造代码块:每创建一个对象就执行一次,优先级在构造方法前面
- 3 构造方法: 每创建一个对象就会执行一次
六 封装继承多态
封装: 隐藏对象的属性和实现的具体细节,仅对外提供公共访问的方式。 private + getter/setter
继承: 类与类之间一种关系,用extends关键字实现,java不支持多继承,但支持多重继承,只能继承public、protected修饰的成员,不能继承private、final修饰的成员
- 优点:
- 提高了代码的复用性
- 提高了代码的可维护性
- 让类与类产生了关系,是多态的前提
- 缺点:
- 增强了类之间的耦合,而软件开发的原则是高内聚,低耦合(内聚:每个模块尽可能完成自己的功能,不依赖模块外部的代码。耦合:模块之间的联系
多态:
- 条件:
- 必须要有继承关系
- 需要有方法的重写
- 必须要有父类的引用指向子类的对象
七 异常的继承体系
Throwable根类:
- Exception:
- Error
八 值传递和引用传递
- 形参是基本数据类型:值传递,值传递操作形参,实参不改变。
- 形参为类类型:引用传递,两个变量指向同一块存储空间
九 final关键字
- final修饰的类无法背继承
- final修饰的方法无法被重写
- final修饰的局部变量一旦被赋值,无法改变
- final修饰的成员变量必须初始化值
十 修饰符
权限修饰符: private,默认,protected,public
状态修饰符:static , final
抽象修饰符:abstract;
本类 同一个包下 不同包下(子类) 不同包下(无关类)
- private y
- 默认 y y
- protected y y y
- public y y y y
十一 内部类InnerClass、静态内部类、局部内部类
- 内部类可以直接访问外部类的成员,包括私有
- 外部类要访问内部类的成员,必须创建对象
- 外部类名.内部类名 对象名 = new 外部类对象. new内部类对象 ; Outer.Inner oi = new Outer().new Inner();
静态内部类: 外部类名.内部类名 对象名 = new 外部类对象 . 内部类对象 Outer.Inner oi = new Outer().Inner();
局部内部类: 方法里面的类
匿名内部类 :
内部类的简化写法。是局部内部类的一种
前提是存在一个类或者接口。 new 类名/接口名(){ 重写方法 };
本质是继承了该类或者实现了该接口的子类匿名对象。