面向对象*

面向对象&面向过程

面向对象思想:
  • 是一种分类思维,将需要考虑具体的问题做哪些分类,然后在对这些分类进行单独研究,也就是说对某个分类下的细节步骤进行面向过程的研究。
  • 面向对象处理需要多人协作处理的问题。
面向过程思想:
  • 按部就班,按照步骤一步一步进行操作
总结:
  • 从宏观上讲,整体的去分析,需要面向对象的思维方式,但是从微观上来讲,仍然是从面向过程去处理。
什么是面向对象:
  • 面向对象编程(OOP)

  • 面向对象编程的本质是:以类的方式组织代码,以对象的组织(封装)数据

  • 抽象

  • 三大特性:

    • 封装

    • 继承

    • 多态

  • 从认知角度,先有对象后有类,对象,是具体的事物,类,是抽象的,是对对象的抽象

  • 从代码运行角度考虑是先有类后有对象。类是对象的模板。

值传递与引用传递

在这里插入图片描述
在这里插入图片描述

类和对象的关系

类是一种抽象的数据类型,它是对某一类事物的整体描述及其定义,但是并不代表某一个具体的事物

  • 动物、植物、电脑…

  • Person类、Pet类、Car类等,这些类都是用来描述、定义某一类具体的事物应该具备的特点和行为

对象是抽象概念的具体事例

  • 张三就是人的一个具体实例,张三家里的旺财就是狗的一个具体实例。

  • 能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念。

创建与初始化对象

  • 使用new关键字创建对象

  • 使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用

  • 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有一下两个特点:

    • 1.须和类的名字相同

    • 2. 必须没有返回类型,也不能写void

构造器
  • 1.和类名相同

  • 2.没有返回值

作用:

  • 1.new 本质在调用构造方法

  • 2.初始化对象的值

注意点:

  • 1.定义有参构造之后,如果想使用无参构造,显示的定义一个无参的构造

  • this.属性 -> 调用本身类对象的属性

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-08Z4X2uU-1638233784429)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1634440817577.png)]

堆:
  • 堆里面有个特殊系列是方法区,一般存储创建出来的对象
  • 栈里面存储的一般是方法、和一些变量的引用

封装:

作用:

  • 1.提高程序的安全性,保护数据

  • 2.隐藏代码的实现细节

  • 3.统一接口

  • 4.系统可维护增加

  • 5.属性私有化,get/set方法

继承:

  • 继承的本质是对某一批类的抽象,从而实现对现实更好的建模

  • extends“扩展”。子类是父类的扩展。

  • Java中类只有单继承,没有多继承

  • 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。

  • 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。

  • 子类和父类之间,具体的关系是“is a".

  • Object类

  • super

    • 1.super调用父类的构造方法,必须在构造方法的第一个
    • 2.super必须只能出现在子类的方法或者构造方法中!
    • 3.super和this不能同时调用构造方法!
    • 4.在无参构造中,会默认继承super()父类的构造方法!
  • this

    • 代表的对象不同:

      • this:本身调用者这个对象
      • super:代表父类对象的应用
    • 前提

      • this:没有继承也可以使用

      • super:只能在继承条件才可以使用

    • 构造方法

      • this():本类的构造
      • super():父类的构造
  • 方法重写

  • 需要有继承的关系,子类重写父类的方法!

    • 1.方法名必须相同

    • 2.参数列表必须相同

    • 3.修饰符:范围可扩大:public>Protected>Default>private

    • 4.抛出的异常:范围,可被缩小,但不能扩大

    • 5.重写,子类的方法和父类必须一致:方法体不同。

    • 为什么需要重写:

      • 1.父类的功能,子类不一定需要,或者不一定满足!
静态方法与非静态方法区别
  • 方法的调用只和左边,定义的数据类型有关

静态方法和非静态方法的区别:

  • 1、静态方法属于类所有,类实例化前即可使用;

  • 2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员;

  • 3、因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存;

  • 4、static内部只能出现static变量和其他static方法!而且static方法中还不能使用this等关键字,因为它是属于整个类;

  • 5、静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁;

  • 6、静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。
    主要区别:静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用。

多态

  • 即同一个方法可以根据发送对象的不同而采用多种不同的行为方式。

  • 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)

  • 多态存在的条件

    • 有继承关系
    • 子类重写父类方法
    • 父类引用指向子类对象
    • 注意:多态是方法的多态,属性没有多态性
      • 1.static方法:属于类,他不属于实例
      • 2.final常量
      • 3.private 方法
      • 4.类型转换异常:ClassCastException
      • 5.父类型,可以指向子类,但是不能调用子类独有的方法
      • 6.对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!
      • 7.子类重写了父类的方法,执行子类的方法
  • instanceof(类型转换)引用类型,判断一个对象 是什么类型

    • 1.父类引用指向子类的对象
    • 2.把子类转换为父类,向上转型;
    • 3.把父类转换为子类,向下转型:强制转换
    • 4…方便方法的调用,减少重复代码!

Static关键字详解

  • 在一个类创建对象时,静态代码块最先加载,并只执行一次,接下来是匿名代码块可以赋一些初值,最后是构造方法

抽象类

  • abstract :extends 单继承
  • 抽象方法,只有方法名字,没有方法的实现!
  • 1.不能new这个抽象类,只能靠子类去实现它:约束!
  • 2.抽象类中可以写普通方法
  • 3.抽象方法必须在抽象类中
  • 抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super()或super(参数列表)调用抽象类中的构造方法

接口的定义与实现

  • 接口就是规范,定义的是一组规,接口的本质是契约。

  • 声明类的关键字是class,声明接口的关键字是interface

  • 作用:

    • 1.约束

    • 2.定义一些方法,让不同的人实现

    • 3.public abstract

    • 4.public static final

    • 5.接口不能被实例化,接口中没有构造方法

    • 6.implements可以实现多个接口

    • 7.必须重写接口中的方法

内部类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5NAcs6fx-1638233784432)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1634606598797.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xaGuJ7lA-1638233784435)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1634606975656.png)]

异常

  • 什么是异常

    • 异常指程序运行中出现的不期而至的各种状况:如文件找不到、网络连接失败、非法参数等。
    • 异常发生在程序运行期间,他正常的影响了程序执行流程。
  • 异常体系结构

    • Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。

    • 在Java API中已经定义了许多异常类,这些异常类分为两大类,错误 Error和异常 Exception

    -[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lroTrraW-1638233784436)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1634690627225.png)]

  • Error

  • Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。

  • Java虚拟机运行错误,当JVM不再有继续执行操作所需要的内存资源时,将出现OutOfMemoryError。这些异常发生时,Java虚拟机一般会选择线程终止;

  • 还有发生在虚拟机试图执行应用时,如类定义错误、连接错误。这些错误是不可查的,因为他们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。

    • Exception
      • 在Exception分支中有一个重要的子类RuntimeException(运行时异常)
        • ArrayIndexOutBoundsRxception(数组下标越界异常)
        • NullPointerException(空指针异常)
        • ArithmeticException(算术异常)
        • MissingResourceExcption(丢失资源)
        • ClassNotFoundException(找不到类)等异常,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理
          [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kFzJlE2w-1638233784437)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1634691440993.png)]
  • Java异常处理机制

    • 抛出异常

      • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6BXSlAlC-1638233784439)(C:\Users\Admini在这里插入图片描述
        strator\AppData\Roaming\Typora\typora-user-images\1634692484699.png)]
    • 捕获异常
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91eLddMf-1638233784440)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1634692079947.png)]

    • 异常处理5个关键字

      • try、catch、finally、throw、throws
  • 处理异常

  • 自定义异常

  • 总结
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8xFZmfOB-1638233784442)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1634693512395.png)]-

什么是方法

  • 何谓方法
    • Java方法是语句的一个集合体,一起去执行一个功能。
    • 方法解决一类问题
    • 方法包含在类或对象中
    • 方法在程序中被创建,在其他的地方被引用
  • 方法的定义及调用
  • 方法重载
    • 方法名称必须相同
    • 参数列表必须不同(个数不同、或类型不同、参数排列排序不同等)
    • 方法的返回类型可以相同也可以不同
    • 仅仅返回类型不同不足以成为方法的重载
  • 命令行传参
  • 可变参数
  • 递归*
    • 本质就是方法调用方法本身

- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-96lvSn9j-1638233784443)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1634377689537.png)]

  • 递归结构包括两个部分:
    • 递归头:什么时候不调用递归方法。如果没有头,将陷入死循环。
    • 递归体:什么时候需要调用自身方法。

数组:

  • 1.数组概述

    • 数组是相同类型数据的有序集合
    • 每个数据称作一个数组元素,每个元素可以通过一个下标来访问。
  • 2.数组声明创建

    • 首先必须声明数组变量,才能在程序中使用数组,下面是声明数组变量的方法:

    • Java语言使用new操作符来创建数组,语法如下

  • dataType[] arrayRefar = new dataType[arraySize]

  • 数组的元素是通过索引访问的,驻足索引从0开始

  • 获取数组的长度:arrays.length

  • 3.数组使用

  • 4.多维数组

  • 5.Arrays

  • 6.稀疏数组

内存分析:

  • Java内存分析:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hGx3bN3P-1638233784445)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1634380233737.png)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FpiKGkr6-1638233784446)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1634380990201.png)]
三种初始化
  • 静态初始化

    int[] a = {1,2,3}

    Man[] mans = {new Man(1,1),new Man(2,2)};

  • 动态初始化

    int[] a = new int[2];

    a[0] = 1;

    a[1] =2;

  • 数组的默认初始化

    数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被照样实例变量同样的方式被隐式初始化。

数组的4个基本特点:
  • 长度是确定的,数组一旦被创建,它的大小就是不可以改变的
  • 元素必须是相同类型,不允许出现混合类型
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型
  • 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。
  • 数组本身就是对象,Java找那个对象是在堆中的,因此数组无论保存原始类型还是其他类型,数组对象本身就是在堆中的。

排序算法*

稀疏数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值