# Tjisejava0317 **Repository Path**: wang-junjie123/tjisejava0317 ## Basic Information - **Project Name**: Tjisejava0317 - **Description**: java基础:opp编程 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-03-17 - **Last Updated**: 2021-03-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # tjise2_java20210317 #### 介绍 Java基础:OOP编程 #### 软件架构 软件架构说明 #### 课堂笔记 1. 面向对象编程 ```aidl 1.1 面向对象的理解 面向对象映射的是人类社会的思维方式; 面向对象的思维方式: 做什么事情【解决什么问题】?首先考虑的是 找谁去做? 这个 谁 就是对象; 面向对象编程的方法:一开始就创建一个类;然后通过抽象填充 属性 行为 ,这样就定义完了类,然后类和类相互调用就是面向对象的编程; 面向过程的思维方式: 做什么事情【解决什么问题】?首先考虑的是 如何去做? 这个 如何 就是过程; 1.2 面向对象的核心内容 面向对象是围绕8个词展开: 面向对象的核心:抽象、封装、继承、多态; 【面试、考试:面向对象的三大核心: 封装、继承、多态】 面向对象的补充:static、final、Abstract、interface 1.3 抽象 面向对象编程的第一步就是抽象;抽象非常重要,以至于抽象内容不准确,会造成后续的面向对象编程的各种问题; 抽象:从同类个体中将群体的共性进行抽象; 抽象的时候要从业务角度进行; 面向对象的抽象是从业务角度进行,将共性抽取出来; 共性主要从两个维度去描述: 属性; 行为 抽象的操作结果就是获取被抽象这一类个体的共同的 属性 和共同的 行为; 抽象的结果内容会封装到类中; 1.4 类和封装 类:是对对象的规范定义; 也就是在面向对象的思想中,使用类来规范定义对象; 有了类之后,可以使用new操作符创建这个类的实例对象; 封装:将抽象的结果封装到类中; 如何进行封装? 将抽象的属性 以 成员变量的形式进行封装; 将抽象的行为 以 成员方法的形式进行封装; 面向对象的封装还会使用 访问控制符 来限定被封装的属性和行为的访问范围; 这是封装的另外一个层面内容; 访问控制修饰符的访问范围: public: 任何类都可以访问; protected:同包的类以及不同包的子类; 默认的:同包的类; private:本类内部; 成员变量: 定义在类范围内的变量叫做成员变量; 成员方法: 定义在类范围的方法就是成员方法; 软件工程的封装原则: 属性一般定义为私有的 private 类型; 为私有的属性提供getter/setter方法接口,方便外部进行访问;【特殊要求除外】 行为一般定义为共有的 public 类型; 可以适当的提供构造方法;【构造方法可以重载】 1.5 构造方法 构造方法是类的行为方法中的一类特殊的方法;用于在类进行创建生产实例对象时而调用的方法; 构造方法和普通方法的区别: 构造方法名是固定的,是以类名作为构造方法名的; 构造方法没有返回值; 构造方法可以使用访问控制修饰符进行修饰,这和普通方法一样; 构造方法不能被其他的普通方法调用; 构造方法可以被 new 操作符调用; 构造方法之间可以调用,但是调用方式是通过 this(实参列表) 来进行调用;this必须放在第一行; 构造方法可以重载; 构造方法的语法规则: 每个类如果没有明确的显式写出构造方法,则由jvm默认提供一个不带参数的默认的构造方法; 如果一个类有显式的构造方法,则jvm默认提供的构造方法就失效了,如果还想使用默认的构造方法,则需要手动显式写出; 构造方法不能继承,不能重写,没有多态; 继承下的构造方法的语法: 子类在执行构造方法的同时会递归的调用父类的构造方法;【在执行子类的构造方法之前会把所有父类的构造方法执行一遍】 子类的构造方法默认调用的是父类的默认的构造方法,所以要求被调用的父类提供默认的构造方法; 如果子类需要显式的调用父类的构造方法,则需要使用 super(实参列表) 来调用父类的构造方法; super(实参列表)要求必须防在第一行; 1.5 成员变量和局部变量 成员变量: 定义在类内部的变量就是成员变量; 成员变量可以使用访问控制修饰符修饰; 成员变量声明之后有默认值;不进行初始化也可以直接使用;【根据类型而定】 成员变量的作用域范围是整个类内部;【有点类似C语言全局变量】 成员变量的生命周期是伴随在类的实例对象的生命周期而存在的; 局部变量:是定在方法体、语句块、方法声明的参数列表的变量就是局部变量; 局部变量不能使用访问控制修饰符修饰; 局部变量声明之后没有默认值,且要求局部变量在使用之前必须进行初始化赋值; 局部变量作用域范围从变量声明位置开始到其所在的语句块结束位置为止; 局部变量作生命周期从变量声明位置开始执行到其所在的语句块结束位置执行结束为止; 局部变量和成员变量同名时,局部变量的值会覆盖成员变量的值;也即是同名时使用的值是局部变量的; 判定原则: 范围最小优先原则; 就近原则; 当局部变量和成员变量同名时,成员变量的值会被覆盖;如果此时需要使用成员变量的值,需要使用 this 关键字最为前缀即可; 1.6 继承 父类角度: 继承是使用已有的类派生新的类的一种方法途径; 子类角度: 子类通过继承获取父类允许子类获得的属性和行为一种途径; 继承是父类和子类之间的关系;面对象通过使用继承达到代码复用的目的; 通过继承子类可以获取父类的属性和行为;【由访问控制修饰符来限定】 java的继承是单继承方式,使用extends关键字实现;一个类只能有一个直接父类;【C++是多继承】【单继承是java简单性的一种体现】 java中的顶级父类是Object类;Object是java中的所有类的直接或间接父类; 访问控制修饰符符对继承的限定:【也是封装的体现】 public:可以被继承; protected:可以被继承; 默认的:能被同包的子类继承; private:不能继承; 1.7 多态 多态是父类和子类之间的一种关系;对于同名的行为子类展示或者扩展出来的与父类不同的行为状态; 多态可以从两个角度理解: 子类角度: 子类覆盖了从父类继承的同名的方法;好处;扩展的父类行为方法的功能,保证了子类功能的多样性; 也叫作重写(Override)【覆写】; 课下扩展作业:重写和重载异同点? 父类角度: 父类可以指代子类;父类类型的变量可以指向子类类型的实例变量;也叫作 塑型 【溯型】; 溯型分为向上溯型和向下溯型; 软件工程原则:面向父类的编程。【面向接口的编程】 扩展:使用Object类型可以指向所有类的实例变量; Object obj = new XXX();【Object可以指向java中所有的类型】 解析: 重写是子类同名的方法覆盖了父类同名的方法; 重写是父子类之间的关系;重载是一个类内容兄弟之间的关系; 父类类型指代子类实例变量是向上溯型;【默认转换】 父类类型强制转换为子类类型向下溯型;【强制转换】 注意:只有向上溯型的父类才能强制转换为子类【向下溯型】; 重写的方法可以使用@Override注解进行标注,也可以不适用,但是推荐使用;【使用了@Override之后ide工具会进行语法检测】 构造方法不构成重写,也就是构造方法没有多态; 如果使用父类指代子类实例变量的方式,使用父类类型的变量只能调用子类从父类继承的行为方法,而子类新扩展行为方法无法调用; 如果需要调用子类新扩展的方法行为,则需要使用向下溯型将父类重新转换为子类;【强制类型转换】 如果子类重写了父类的行为方法,在子类中如果想调用父类的被覆盖行为方法,则需要使用super.xxx()来调用; 类似成员变量和局部变量同名时使用this区分是一样的; 重写的构成条件: 父类和子类的方法名要相同; 父类和子类的方法的参数列表要相同; 子类的访问控制修饰符的范围要大于等于父类的访问控制修饰符的范围; 子类的返回值类型和父类方法的返回值类型一样或者可以兼容; 子类方法抛出的异常范围要小于等于父类方法抛出或者处理的异常范围; 1.8 this和super关键字的用法 this:指代当前类的实例对象; this. 表示当前类的;用于区分被同名局部变量覆盖成员变量; this(实参列表) 表示调用当前类的构造方法;【只能在第一行】 super:指代当前类的父类的实例对象; super. 表示当前类的父类的属性和行为;用于区分被子类同名方法重写的父类方法; super(实参列表) 表示调用当前类的父类的构造方法;【只能在第一行】 1.9 static关键字 表示静态的关键字;静态在jvm中是常驻内存的;静态的生命周期:从加载jvm开始到jvm运行结束为止; static可以修饰:类、方法、成员变量、语句块; 语句块:使用 {} 标识的代码块; 主要作用是改变作用域范围; static只能修饰成员变量不能修饰局部变量; static修饰的静态方法或者静态语句块只能调用静态的对象【静态成员变量、静态的方法】 非静态的方法可以调用静态的和非静态的对象;也就是非静态方法可以调用所有的; static修饰的成员变量和方法可以类名直接调用;所以静态的成员变量也叫作类变量; static修饰的语句块叫做静态语句块,静态语句块只执行一次;作用:用于类加载的一些初始化操作;有点类似于构造方法的初始化作用; 非静态语句块在类每次new时都会执行,并且是在构造方法之前执行的;静态语句块只执行一次; 1.10 final关键字 final关键字是终结的意思、最终的意思; final可以修饰类、方法、变量(成员变量和局部变量); final修饰类表示这个不能被继承;防止继承滥用的;例如 String 类; final修饰的方法表示这个方法不能够被子类重写; 防止通过重写修改父类来修改父类方法的逻辑; final修饰的变量表示这个变量的值一旦被初始化,则不允许再进行修改; 对于基本类型来说是一旦初始化之后,不允许在修改; 【值不能改】 对于对象类型来说是一旦分配内存空间之后,怎不允许修改引用地址;存储空间中的内容可以修改; 【地址的值不能改;地址的存储空间内容可以改】 static final 修饰的成员变量 叫做静态常量 ; 命名规则 字母全部大写用_分割; 静态常量要求声明时就要进行初始化; ``` 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)