java面向对象!知识点梳理(Xmind加知识点)

java面向对象!知识点梳理(Xmind加知识点)

想要xmind原文件的小伙伴私聊我,看见秒回复哦
java面向对象!知识点梳理(Xmind加知识点)

面向对象的思想介绍

什么是面向对象

  • 一种编程时解决问题的高级编程思路

面向对象和面向过程的比较

  • 面向过程: 更强调解决问题的基本步骤
  • 面向对象 :强调拥有数据的主体,自底向上不断拼装
  • 两者的关系: 面向对象是一种高级的编程编程思想,面向对象基于面向过程,面向过程是面向对象的基础

面向对象的好处

  • 1.更符合人类的思想习惯(找类找对象来帮你解决) 2.复杂问题简单化 3.由执行执行者,变为了指挥者

面向对象的三大特征

    1. 封装 2. 继承 3. 多态

类和对象

类和对象的比较

  • 类 :是对具体事务的抽取出来的结果
  • 对象: 类的具体实现

什么是类

  • 定义 ;一组相关属性和行为的集合

    • 属性 : 对事物特征的描述,—>成员变量
    • 行为 : 对事物功能的描述-----> 成员方法

对象的创建

  • 格式

    类名 对象名 = new 类名();

  • 调用方法格式
    对象名 . 方法名 ();
  • 调用属性格式
    对象名 . 变量名;
  • 补充:创建对象的内存理解

      1. 将要创建的对象所属的类加载到方法区 (类之加载一次) 2. 在栈内存中创建该类的引用, 将来用于存储该对象地址的引用 3.在堆内存中开辟存储空间,给各个成员变量分配内存 4 .给成员变量赋初值 5. 将对象内存的地址,赋值给栈内存中的引用

补充

  • 匿名对象

    没有名字的对象

    • 格式

      new 类名 ();

    • 使用场景

      • 1, 在对象创建后只使用一次 2, 可以作为某方法的实际参数 3. 可以作为某方法的返回值
    • 注意事项

      • 1.匿名对象可以给成员变量赋初值,但是没有任何意义,没有引用的对象很快会被当做垃圾回收
  • 成员变量和局部变量的比较

    • 不同点

      • 代码层面:

          1. 局部变量: 定义在方法中 2. 成员变量: 定义在类中,方法外
      • 内存层面

        • 空间(分配内存): 1 . 局部变量 :分配空间在栈内存 2 . 分配空间在堆内存
        • 时间(生命周期): 1. 局部变量: 随着方法的调用而存在,随着方法的调用结束而消失
          2. 成员变量: 随着对象的创建而存在,随着对象的消失而消失
      • 初始化状态

          1. 局部变量: 没有默认的初始化值,必须先手动赋值,才能使用 2. 成员变量: 有默认初始化值 和数组默认值相同
      • 作用域

        • 1.局部变量只能作用在该方法内,在声明的该行,到最近的代码块的右大括号结束; 2 .成员变量: 从至少本类(非私有成员变量继承之后可以作用域延申到子类)
    • 在同一个成员方法中成员变量和局部变量冲突的时候: 就近访问原则

封装

概述: 隐藏事物的属性和细节,对外提供公共的访问方式

为什么要封装和封装的好处

  • 1.隐藏事物的实现细节 2. 提高的代码的复用性 3. 提高安全性

封装的原则

    1. 隐藏事物的属性 2 .隐藏事物实现的细节 3. 对外提供公共的访问接口

private关键字

  • 可以修饰的内容

    • 1 成员变量 2. 成员方法 3 .构造方法 4 . 内部类
  • 修饰后的效果

    • 只能在本类中访问
  • private关键字注意事项

    • 封装的修饰符还有 默认修饰符 , protected ,public 每个修饰符的访问范围都不相同

属性的公共访问方法 getter 和 setter

  • 格式

    系快捷键可以生成

  • 为什么要有getter和setter方法

    • 成员变量被private修饰后,就只能在本类中被访问,get 和set 就是提供给外界的公共访问方式

this关键字

  • 含义

    • 用来表示当前类的对象的引用,也就是,那个来调用this所在的方法,那个就是this
  • 作用

    • 用来区*部变量和成员变量重名的情况
  • 补充

    • 变量访问的就近原则: 当在访问变量名称的时候,会先寻找最近该变量的定义,如果找到了就用,否则去更远的地方寻找

构造方法

  • 作用

    • 用于给对象中的成员变量赋值,jvm虚拟自动调用
  • 构造方法的特点

      1. 没有返回值类型 2 .方法名和类名必须一致 3 没有return语句,可以写return;
  • 注意事项

    • 1.构造方法是由创建对象过程中,jvm自动调用 2. 如果自己没有定义构造方法,那么系统会默认提供空参构造 3.当自己定义了构造方法,系统将不在提供 4 构造方法中一般都需要重载
  • 补充:通过构造方法创建对象的内存理解

静态

为什么要有静态

  • 如果某个类型的对象都具有一个相同的属性值,没必要在每个对象的空间中都声明一份这样的成员变量,浪费存储空间, 对于静态方法,如果每个对象都需要调用这个方法来实现这个功能,就可以声明成静态的,通过类名字直接调用来使用,提高了复用性

静态变量的特点

  • 1.随着类的加载而加载, 2 .静态变量优先于对象存在 3. 静态变量别所有该类的对象所共享 4. 不需要创建对象通过类名直接调用

静态访问的注意事项

  • 静态方法不能访问非静态的变量,方法,不能有this关键字

补充:静态变量和非静态变量的区别

  • 概念上所属不同

      1. 非静态变量属于对象 2. 静态变量属于类
  • 内存空间

    • 存储位置不同

        1. 非静态的变量存储在堆内存, 2 静态变量存储在方法区
    • 生命周期不同

      • 1.非静态变量随着对象的存在而存在,随着对象的消失而消失 2. 随类的加载而加载,随着类的消失而消失
  • 访问方式

    • 1.非静态变量只能通过类名来访问.2.静态变量: 通过类名字访问或者对象名

继承

为什么要有继承

  • 让类和类之间产生关系

    • 提高代码的复用性
    • 多态的前提

概述

  • 关键字

    • extends,使子类获得父类属性和方法的使用权,并不属于子类

继承的注意事项

    1. 子类不能继承父类的私有变量和方法,但是可以通过继承的公共访问接口使用, 2,子类不能继承父类的构造方法,但是必须调用
  • 子类和父类必须满足, is a 原则

继承的特点

  • 支持单继承,不支持多继承,支持多层继承

super关键字

  • 含义: 表示当前对象父类的引用

  • 补充:this和super

    • 作为关键字的区别

      • 含义不同

          1. super : 代表本类当对象的父类的引用 2. this : 代表本类当前对象的引用
        • 代表的引用的值相同,但是他们的权限不同
      • 访问成员变量的区别

          1. super只能访问父类的成员变量
            2.this既可以访问子类成员变量,也可以访问父类成员变量,优先在外层寻找
      • 访问成员方法的区别

          1. super只能访问父类的成员方法
            2.this既可以访问子类成员变量,也可以访问父类成员方法,优先在外层寻找
    • 作为语句访问构造方法

      • super()语句

        • 访问父类的无参构造
      • this()语句

        • 访问本类的无参构造
      • 注意事项

          1. 必须放在构造方法的第一行(保证父类先被加载)
  1. 并且super语句和this语句不能同时出现

    • 注意事项:1 super语句和this语句在调用的时候,避免递归调用 2.只能出现在构造方法的第一行

继承中成员变量的关系

    1. 如果子类中定义了和父类不同名字的变量(非私有)子类既可以访问父类变量,也可以访问本身变量 2. 如果子类中定义了和父类同名的方法,则会按照就近原则进行访问

继承中构造方法的关系

  • 1.子类初始化类的数据之前,必须完成对父类的初始化 2.如果在子类的构造方法中,没有显示的调用其他任何的构造方法,系统默认在第一行使用super() 3.如果子类的构造方法手动的调用了父类的其他构造方法,那么系统将不再提供访问其他构造方法的语句 4. 构造方之间不能递归调用

继承中成员方法的关系

  • 1.子类默认继承父类中的非私有方法,子类也可以定义自己的特有方法 2.字符类中出现同名方法就产生了重写

重写的注意事项

  • 私有方法不能重写,如果出现重名,相当于在子类中定义了一个新方法

补充:重写和重载

  • 重写

      1. 在子父类中,方法名相同,参数列表相同,与返回值类型有关(使用父类的方法定义,修改为子类的实现) 2.子类重写方法的修饰符权限要大于等于父类 3.子类重写方法抛出的异常要比父类小
  • 重载

    • 方法名相同,参数列表不相同(参数类型,参数顺序,参数个数有一个不同即可),与返回值类型无关

    • 注意事项:

        1. 参数列表中与参数名无关,关注的是参数类型 .2. 与返回值类型无关 3 如果实际参数传入没有最合适的方法匹配,会退而求其次(自动,向上,就近匹配最合适的方法) 4,在调用方法的时候要避免调用匹配不明确的情况(对于每个参数都要分析那个方法是相对合适的,所有参数的权重相同都相对合适才能使用,否则编译报错)
    • 好处作用

      • 屏蔽了同种功能方法之间的参数差异,方法的调用系统根据参数自动匹配,减少了程序员的记忆负担

代码块

概述

  • 使用大括号包起来的一段代码,放在不同的位置,有不同的名称,有不同的名称,不同的作用,有不同的执行时机

分类

  • 局部代码块

    • 位置

      • 方法中
    • 作用

      • 限定变量的生命周期
    • 注意事项

      • 在代码块中声明的变量,出了方法快就无法使用,但是在局部代码块中,可以使用代码块外的变量
  • 构造代码块

    • 位置

      • 在类中方法外
    • 作用

      • 用于为成员方法赋值
    • 构造代码块和构造方法的执行说明

      • 1.由jvm虚拟机自调用 2. 构造代码块在构造方法执行之前执行 3. 任何的构造方法在执行之前都会先执行构造代码块 4. 如果每个构造方法都会执行的内容,提取带构造代码块中
  • 静态代码块

    • 位置

      • 类中方法外
    • 格式

      static{
      代码块内容
      }

    • 作用

      • 用于给静态的成员变量赋值
    • 执行特点

      • 1.随着类的加载而加载 . 2. 类只会加载一次,所以静态代码块也只执行一次 3. 执行时机最早: 在于所有对象的相关内特

final关键字

概念

  • 单词含义: 最终的,最后的,表示不能修改的

可以修饰类,方法,变量

  • 修饰类

    • 表示一个最终类,不能有子类 (不能被继承意味着类中的所方法都不能被修改,但是不影响当前类方法的使用) (不影响创建对象)
  • 修饰方法

    • 表示一个最终的方法不能被修改
  • 修饰变量

    • 变量就变成了常量只能被赋值一次,不能被修改

内部类

什么是内部类

  • 定义在类的内部,或者类中方法中的类就是内部类

根据定义位置划分类

  • 成员内部类(类中方法外)

    • 普通成员内部类

      • 格式

        格式:
        class 内部类名 {
        内部类成员
        }

      • 访问方式

          1. 内部类可以直接访问内部类成员 2. 外部类访问内部类的成员必须创建内部类对象在调用 3 在外部类之外的类访问该类内部类的格式:
      • 在无关类中创建对象格式

        外部类名.内部类名 内部类对象名 =
        new 外部类名().内部类名();

      • 特点

    • 私有成员内部类

      • 格式

        格式:
        private class 内部类名 {
        内部类成员
        }

      • 访问方式

          1. 在外部类以外不能直接访问 2. 可以在外部类定义一个访问私有成员内部类的共有方法,外界可以调用该方法,间接访问私有成员内部类 3 .外部类直接在类中创建对象访问
    • 静态成员内部类

      • 格式

        格式:
        static class 内部类名 {
        内部类成员
        }

      • 访问特点

        • 1成员内部类是外部类的静态成员,可以通过内部类名直接调用 2. 静态内部类的非静态成员需要创建内部类对象之后才能调用

        • 补充

          • 总结:一个类是否需要需要创建对象,不取决于该类本身是否静态,而是要访问的成员是否静态
      • 在无关类中对象创建的格式:

        外部类名. 内部类名 内部类对象名 =
        new 外部类名. 内部类名();

  • 局部内部类(在方法中)

    • 访问说明

      • 方法的封装性是最强的,跟变量一样,封装在方法中的局部内部类外界无法访问到的
    • 解决方案

      • 在方法内部创建该局部的内部类对象并使用内部类的成员,外部类可以通过调用该方法,间接调用到该局部内部类

什么是包

  • 用于分类分类存放类文件(.class)的层级文件夹

作用

  • 在不同的包中,可以用相同的类名(像标记一样用包区分了)

命名

  • 一般为公司域名的导致,因为域名是全球唯一的,这样类就唯一了,便于后期维护

包的声明

  • 使用package关键字,声明当前的类是属于那一个包的,声明在java文件的第一行

效果

    1. 编译这个类也,就会到指定的为文件夹 2.当前的类的名字就变成了(全类名 = 包名. 类名)

运行

  • 如果想要运行该Java类就要到包目录下执行命令

简化使用

  • 为了不在开发中每次都写全类名,会让代码冗余,所以引入导包 使用import 关键字

  • 导包格式

    import 包名

权限修饰符

概念

  • 用于控制册成员的访问权限的修饰符

意义

  • 是封装的一种体现形式

分类

  • private

    • 只能在本类中访问
  • 默认权限修饰符

    • 能在本包中被访问
  • protected

    • 在其他包的有有继承关系的子类可以被访问
  • public

    • 其他包的无关子类也可以访问

多态

概念

  • 事物的多种状态

    • 对象的多态性

      • 同一个对象可能有,可能具有不同的名称 eg: 猫既可以叫猫,也可以叫动物
    • 类型的多态性

      • 同一个类型,可能有不同的子类实现 eg:动物既可以指猫,也可以指狗,

为什么要有多态

  • 为了实现动态化,不能将原代码固化,配合反射

多态的前提

    1. 要有子父类的继承实现关系 2. 有方法的重写 3. 父类的引用指向子类的对象

多态中成员方法的访问特点

  • 编译看左边,运行看右边(jvm的特定操作)

    • 编译看左边,看 =号左边 是不是存在该方法的定义,存在即通过
    • 运行看右边,运行的时候执行的是 =号右边子类对该方法的具体实现

多态的好处

  • 1.提高了代码的可拓展性 2. 在方法的参数的列表中,可以定义父类的引用,或接口的引用,将来调用的时候,所有的子类对象或者实现该接口的对象都可以传进去做实参 3.子类的对象来源可以非常广泛,不仅仅是new出来的,还可以通过反射获取,实现在编译阶段不确定具体的子类的类型,从而达到动态灵活控制

抽象类

概念(abstract)

  • 抽取像的,相同的,相似的内容出来

抽象方法

  • 概念

    • 只有方法的声明,没有方法的实现

抽象类

  • 概念

    • 可以定义抽象方法的类,就是抽象类
  • 特点

      1. 抽象类和方法都必须用abstract修饰 2. 抽象方法所在类必须是抽象类, 抽象类中未必有抽象方法 3. 抽象类只能被继承后的子类实例化
    • 1 抽象类的子类如果没有将父类的抽象方法全部实现,那么子类还是抽象的,还需要使用abstract修饰 2.只有将父类的抽象方法全部实现才能创建子类对象

注意事项

  • 成员变量

    • 抽象类可以定义成员变量,也可以定义常量,但是不能抽象(用于子类的继承)
  • 构造方法

    • 可以有,取决于该抽象类是不是有成员变量,是提供给子类调用的
  • 成员方法

    • 抽象方法

      • 强制子类重写
    • 非抽象方法

      • 正常继承,提高代码复用性

补充

  • 一个类中是不是需要构造方法

    • 取决于该类是不是有成员变量需要初始化,而不是取决于这个类是不是或能不能被实例化对象,比如抽象类有构造方法是给成员变量赋值,给实现的子类构造用的

接口

概念

  • 广义

    • 一切定义规则的都是接口
  • 狭义

    • Java中定义方法命名的规则就是接口

好处

  • 方法的命名规则定义出来后,方法的调用和方法的实现就分离开了,可以提升开发效率,降低代码的耦合性

特点

  • 1 .接口其实是特殊的类,编译之之后也是.class文件 2. 只能声明抽象方法的声明,没有方法体(java8之后可以定义静态方法和默认方法(选择性的被子类重写)) 3. 类可以实现抽象接口中的方法

  • 接口的实现类的两种前途

    • 没有完全实现接口的所有方法,该类成为抽象类
    • 实现全部的抽象方法,成为普通类

接口中的成员特点

  • 成员变量

    • 可以有,必须是常量,没有变量.默认别 public static final 修饰
  • 构造方法

    • 没有构造方法(没有真正意义的成员变量)
  • 成员方法

    • 只能是抽象方法

      • 默认被 public static修饰

补充

  • 类和类的关系

    • 类和类可以子父类的继承,单继承不能对继承,支持多层继承
  • 类和接口的关系

    • 类实现接口,可以多实现,一个类可以实现多个接口,但是不能,多层实现
  • 接口和接口的关系

    • 可以继承,extends关键字,可以单继承可以多继承,可以多层继承
  • 类和接口的区别(设计上讲)

    • 抽象类:定义物体本身固有的属性,和行为
    • 接口,定义物体通过学习,训练拓展出来的行为

匿名内部类

概念

  • 所谓内部类是指可以利用内部类 ,是指可以利用内部类创建没有名称的对象,它对父类或实现的接口进行重写,达到使用知名类和接口的作用,并调用自己实现方法

存在的意义

  • 为了简化代码

前提

  • 匿名类继承或实现接口

格式

new 父类类名或者接口名(){
父类的重写方法或者接口的实现内容
}

本质

  • 1 . 创建了一一个类的子类对象,或接口类的实现类对象 2. 更强调一种关系的写法

内部类编译之后字节码文件名字的区分

  • 外部类名$1…内部类名