
1.基本概念1.1面向对象VS面向过程面向对象关注对象谁来做做什么代码模块化复用性强易拓展面向过程关注过程先做什么再做什么代码线性简单直接复用性差、难维护1.2核心概念-类和对象·类类是共同特征的描述-对象的模板// 类的定义class 类名 { 属性; 方法; 构造方法; } public class 类名 { // 1. 属性成员变量描述类的特征 数据类型 属性名; // 2. 构造方法创建对象时初始化属性与类名相同无返回值 public 类名() { // 无参构造默认会有若写了带参构造默认的会消失 } public 类名(参数列表) { // 带参构造给属性赋值 this.属性名 参数; } // 3. 方法成员方法描述类的行为 返回值类型 方法名(参数列表) { 方法体; return 返回值; } }·对象对象是真实存在的具体实例-类的实例类名 对象名new 类名();·类和对象的关系类是模板对象是模板造出来的成品。类只是模板不会占用内存对象是实际存在的实例会占用内存。·构造方法的作用初始化对象的属性没有返回值名称必须和类名一致如果没写构造方法Java 会默认提供一个无参构造如果写了带参构造默认的无参构造会消失建议手动补全无参构造。·this关键字只能在类的方法 / 构造方法中使用指代当前对象用来区分成员变量和局部变量。1.3核心特性-封装、继承和多态封装将数据和操作数据的方法绑定在一起隐藏对象的属性和实现细节。继承子类可以继承父类的特征和行为实现代码复用。多态允许不同类的对象对同一消息做出响应。1.4标准的JavaBean类1类名需要见名知意2成员变量使用private修饰3提供至少两个构造方法-无参构造方法和带全部参数的构造方法4成员方法-提供给每一个成员变量对应的setXxx()和getXxx()2.核心特性访问修饰符修饰符同一类中同一包中子类中任意地方public✅✅✅✅protected✅✅✅❌default默认不写✅✅❌❌private✅❌❌❌2.1封装-给属性加安全锁·封装的核心隐藏对象的内部细节属性私有化只通过指定接口get/set暴露访问方式从而控制访问权限保证数据安全。·封装的实现步骤1使用private修饰属性私有化属性只能在当前类中进行访问2提供public的get方法可以获取属性值3提供public的set方法可以修改属性值在set中可以添加基本的逻辑验证·封装的核心价值安全性避免非法数据、可维护性修改校验逻辑只需要修改set方法2.2继承-复用代码少写重复逻辑·继承的核心子类子模板继承父类父模板的属性和方法子类只需要写自己特有的属性和方法实现代码的复用。·继承的语法// 子类 extends 父类 public class 子类名 extends 父类名 { // 子类特有的属性和方法 }·核心知识点1super关键字作用在子类中访问父类的属性、方法、构造方法注意super()调用父类构造必须写在子类的第一行且只能出现一次与this的区别this指代的是当前对象super指代的是父类对象2方法重写子类对父类的方法进行重新实现必须满足以下三个规则-方法名、参数列表和返回值类型必须完全与父类保持一致-子类方法的访问权限不能低于父类-用Override注解可以验证是否符合重写规则3Java的继承规则-单继承一个子类只能有一个直接父类不能同时继承两个-多层继承子类可以继承父类父类可以再继承其他类-子类不能继承父类的private属性/方法但可以通过父类的public get/set访问-所有类都默认继承Object类Java的顶层父类2.3多态-同一行为不同表现·多态的核心父类引用指向子类对象调用方法时实际执行的时子类重写之后的方法。·多态的实现条件-有继承关系 -子类重写父类方法 -父类引用指向其他子类·方法重载多态的另一种形式方法重载指的是同一个类中方法名相同但参数列表不同个数类型顺序不同与返回值无关重载 vs 重写易混淆点对比维度重载Overload重写Override发生位置同一类中子类与父类之间方法名相同相同参数列表不同个数 / 类型 / 顺序相同返回值无要求必须与父类一致访问权限无要求子类不能低于父类核心作用同一方法的不同参数形式子类个性化实现父类方3.内存图每个软件在运行时都会占用一块内存但是JVM将其分为五块区域-本地方法栈、寄存器、栈、堆、方法区。在jdk7以前堆和方法区是连在一起的在真实的物理区域也是连续的。从jdk8开始取消方法区新增元空间将原来方法区的多种功能进行拆分有的功能放到了堆中有的功能放到了元空间中。方法区字节码文件加载时进入的内存。栈内存方法运行时所进入的内存变量也是在这里。堆内存new出来的东西会在这块内存中开辟空间并产生地址。3.1一个对象的内存图1加载class文件2申明局部变量3在堆内存中开辟一个空间4默认初始化5显示初始化6构造方法初始化7将堆内存中的地址值赋值给左边的局部变量eg.3.2两个对象的内存图创建两个对象的时候在第一次创建对象时已经加载过class字节码文件所以第二次创建对象的时候不需要再加载一次字节码文件了。3.3两个引用指向同一个对象3.4this的内存原理this的作用区分局部变量和成员变量。this的本质所在方法调用者的地址值。4.基本数据类型和引用数据类型基本数据类型整数类型、浮点数类型、布尔类型、字符类型引用数据类型创建的任意对象、数组等都是字符串类型基本数据类型和引用数据类型的区别基本数据类型中数据值是存储在自己的空间中。-赋值给其他变量时也是赋的真实值。引用数据类型中数据值存储在其他空间中自己空间中存储的是地址值。-赋值给其他变量时赋的是地址值。5.成员变量和局部变量的区别区别成员变量局部变量类中的位置类中方法外方法内方法声明上初始化值不同有默认初始化值没有使用之前需要完成赋值内存位置不同堆内存栈内存生命周期不同随着对象的创建而存在随着对象的消失而消失随着方法的调用而存在随着方法运行结束而消失作用域整个类中有效当前方法中有效