欢迎光临散文网 会员登陆 & 注册

学习记录之面向对象

2022-07-12 00:03 作者:星月袭空  | 我要投稿

1. 构造方法:构造函数、构造器、构建器----------------复用给成员变量初始化代码

   - 作用:给成员变量赋初始值

   - 与类同名,没有返回值类型(连void都没有)

   - 在创建(new)对象时被自动调用

   - 若自己不写构造方法,则编译器默认提供一个无参构造方法,

     若自己写了构造方法,则不再默认提供

   - 构造方法可以重载

2. this:指代当前对象,哪个对象调用方法它指的就是哪个对象

             只能用在方法中,方法中访问成员变量之前默认有个this.

   this的用法:

   - this.成员变量名--------------访问成员变量当成员变量和局部变量同名时,若想访问成员变量则this不能省略,其它一般省略

   - this.方法名()------------------调用方法(一般不用,了解)

   - this()----------------------------调用构造方法(一般不用,了解)

null:表示空,没有指向任何对象。若引用的值为null,则该引用不能再进行任何点操作了,若操作则发生NullPointerException空指针异常。

注:成员变量和局部变量是可以同名的,但是使用的时候默认采取的是就近原则。

引用类型数组:

   - 给引用类型数组的元素赋值时,必须得new个对象

   - 若想访问对象的数据/调用方法,需要通过数组元素去打点

继承:

   - 作用:代码复用

   - 通过extends来实现继承

   - 超类/父类:共有的属性和行为

     派生类/子类:特有的属性和行为

   - 派生类可以访问:派生类的+超类的,而超类不能访问派生类的

   - 一个超类可以有多个派生类,但一个派生类只能继承一个超类-----单一继承 具有传递性

   - java规定:构造派生类之前必须先构造超类

     - 在派生类构造方法中若没有调用超类构造方法,则默认super()调超类无参构造方法

     - 在派生类构造方法中若自己调用了超类构造方法,则不再默认提供

       > 注意:super()调用超类构造方法,必须位于派生类构造方法的第一行

3. super:指代当前对象的超类对象

   super的用法:

   - super.成员变量名------------------------访问超类的成员变量(一般不用,了解)

   - super.方法名()----------------------------调用超类的方法

   - super()--------------------------------------调用超类的构造方法

向上造型:

   - 超类型的引用指向派生类的对象

   - 能点出来什么,看引用的类型

2. 方法的重写(override/overriding):重新写

   - 发生在父子类中,方法名相同,参数列表相同------派生类中重写了超类的方法

   - 重写方法被调用时,看对象的类型

   - 重写需遵循"两同两小一大"原则:

     - 两同:

       - 方法名相同

       - 参数列表相同

     - 两小:

       - 派生类方法的返回值类型小于或等于超类方法的

         - void和基本类型时,必须相等

         - 引用类型时,可以小于或等于

       - 派生类方法抛出的异常小于或等于超类方法的

     - 一大:

       - 派生类方法的访问权限大于或等于超类方法的

3. 重写与重载的区别:-------------常见面试题

   - 重写(override):发生在父子类中,方法名相同,参数列表相同

   - 重载(overload):发生在同一类中,方法名相同,参数列表不同

继承要符合is(是)的关系

何时向上造型:

   - 当多种角色所干的事几乎一样时,可以将它们统一造型到一个数组中,复用

   - 比如:学生/老师/医生都在输出名字并问好,就将它们统一造型到Person数组中,一个for即可,实现代码的复用

package和import

   - package:声明包

     - 作用:避免类的命名冲突

     - 同包中的类不能同名,不同包中的类可以同名

     - 类的全称:包名.类名,包名常常有层次结构

     - 建议:包名所有字母都小写

   - import:导入类

     - 同包中的类可以直接访问的,不同包中的类不能直接访问,若想访问:

       - 先import导入类,再使用类----------建议

       - 类的全称------------------------------------太繁琐,不建议

访问控制修饰符:---------------------保护数据的安全

   - public:公开的,任何类

   - private:私有的,本类

   - protected:受保护的,本类、派生类、同包类

   - 默认的:什么也不写,本类、同包类---------------------java不建议

     > 说明:

     > 1. 类的访问权限只能是public或默认的

     > 2. 类中成员的访问权限如上4种都可以

     > 3. 访问权限由大到小:public>protected>默认的>private

final:最终的、不可改变的-------------单独应用率低

   - 修饰变量:变量不能被改变

   - 修饰方法:方法不能被重写

   - 修饰类:类不能被继承 

static:静态的

   - 静态变量:

     - 由static修饰

     - 属于类,存储在方法区中,只有一份

     - 常常通过类名点来访问

     - 何时用:所有对象所共享的数据(图片、音频、视频等)

   - 静态方法:

     - 由static修饰

     - 属于类,存储在方法区中,只有一份

     - 常常通过类名点来访问

     - 静态方法中没有隐式this传递,所以不能直接访问实例成员

     - 何时用:方法的操作与对象无关(不需要访问对象的数据)

   - 静态块:

     - 由static修饰

     - 属于类,在类被加载时自动执行,一个类只被加载一次,所以静态块只执行一次

     - 何时用:初始化/加载静态资源(图片、音频、视频等)

访问权限常规使用规则:

   - 实例变量一般都private

   - 方法绝大部分情况都是public的,但是若某方法只是我自己用,也是可以private的

   - 静态的一般都是public

成员变量分两种:

   - 实例变量:没有static修饰,属于对象的,存储在堆中,有几个对象就有几份通过引用打点来访问

   - 静态变量:由static修饰,属于类的,存储在方法区中,只有一份  通过类名打点来访问

内存管理:由JVM管理

   - 堆:new出来的对象(包括实例变量)

   - 栈:局部变量(包括方法的参数)

   - 方法区:.class字节码文件(包括静态变量、所有方法)

 给成员变量赋值规则:

   - 静态变量,一般在静态块中初始化

   - 实例变量,一般在构造方法中初始化


学习记录之面向对象的评论 (共 条)

分享到微博请遵守国家法律