面向对象学习(一)

Java面向对象编程

面向对象与面向过程

  • java的总纲领
  • 例如
    • 道德经
      • 道可道非常道,名可名非常名
    • 九阴真经
      • 是故虚胜实,不足胜有余
  • 人生境界
    • 所有的事情我只要努力就会成功
    • 我发现有些事情我努力了也不一定会成功
    • 我明明知道有些事情努力了不一定成功,但我还是会拼尽一切去努力实现
  • 核心目标是一样的
    • 让我们的代码实现某些功能
    • 吃饭:
      • 妈妈–面向过程(比较细致,细节多)
      • 父亲–面向对象(比较粗糙)
  • 面向对象和面向过程属于相互补充依存的关系
    • 这两者是不可分割的
  • 面向对象就是以Java的世界观来描述世界
    • 在java的眼中,一切都是对象(万事万物皆对象)
    • 我们考思考解决方案的时候都是以对象的为基础进行思考
    • 有时我们为了更好的去管理对象,我们需要按照类别对对象进行抽象
    • 抽象有的时候也分抽象的级别 枣树–树--植物
    • 抽象对象的时候也会考虑抽象的维度(属性,方法,构造器)

类与对象

  • 对象就是我们生活中真实存在的一个事物,我们可以观察或者感觉到

  • 类是我们对同一类事物进行抽象所得到的一个概念

    • 将来如何判定新的事物是什么,我们通过以前类的概念进行甄别
  • 类是对象的抽象,对象是类的具体实现

    • 类只存在一种,就相当于模板
    • 对象可以有千千万万,而且可能各有不同
    • 但是对象就是类的千千万万种实现之一
  • 例如

    • 小王,明天帮我买一个杯子(类)
    • 小王买了一个咖啡杯(对象)
    • 面向对象学习(一)_第1张图片
  • 可以理解为

    • 类就是一张手机图纸
    • 对象就是通过这张图纸制造的手机
  • 类与对象的关系就是抽象与实现

    • java是面向对象的语言
    • 处理一切逻辑都是基于对象,所以我们处理逻辑前需要创建对象
    • 我们只能通过类去创建对象,类又是从对象抽象出来的
    • 抽象类之前我们需要对对象进行充分的一个认知
  • 类与对象的关系

    • 类是对象的模板,对象是类的具体实现
    • 类定义了对象的静态属性和动态属性
    • 类是class 对象是Object Instance
  • 类会抽象什么内容?

    • 小狗
      • 颜色
      • 类别
      • 体重
      • 高度
      • 长度
      • 看家()
      • 保护主人()
      • 追小球()
      • 带铃铛()
    • 静态属性:
      • 现在可以理解为成员变量,成员属性
    • 动态属性
      • 成员方法

类的定义

  • 在一个java文件中可以同时存在多个class类,但是只能有一个类被public修饰
    • 并且这个类必须和文件名同名
  • 语法格式
    • 修饰符 class 类名{
      • 属性
      • 方法
    • }
    • 类名
      • 基本上和变量规则相同
      • 类名首字母需要大写,其他驼峰原则
    • 属性
      • 主要用来定义对象的一些静态特征
    • 方法
      • 主要用来定义对象的一些动态行为或者功能
    • 构造器
      • 构造器不需要我们手动的去调用
      • 构造器默认会在创建对象的时候自己调用
        • new ,继承调用,反射调用
      • 构造器的作用就是为了初始化我们对象的一些属性
      • 系统默认会给类一个空构造器,但是一旦我们手动书写构造器,空构造器就失效了
    • 将来大家抽象类的时候只需要抽象和业务相关的属性或者方法即可,不可能全部抽象
      • 全部抽象太复杂
      • 会浪费掉一部分内存的开销
  • 创建对象
    • 数据类型 变量名 = 变量值;
    • 类 对象名 = new 类();

JVM的内存分析

  • 首先jvm的内存是基于当前计算机内存影响的
  • 我们创建的变量都会存放到内存中
    • 本次代码变量由多少个
      • Hello05Jvm
        • #main()
          • pastryChef
          • cake
      • PastryChef
        • String name;
        • int phoneNumber;
        • #cook()
          • box
          • cake
      • Cake
        • int eggs;
        • double price;
        • String type;
        • Box box;
      • Box
        • int radius;
        • String color;
    • 因为jvm内存大小是有限的,而我们要创建的对象又很多,我们就需要对jvm进行合理的规划和管理
      • 对象使用完毕需要回收
    • jvm为了便于管理,将JVM内存定义不同的空间,不同的空间拥有不同的作用
      • java虚拟机栈
        • 每一个线程独享一个虚拟机栈
        • 就相当于大家去超市推的小推车,小推车中的物品是属于自己的
        • 而且超市中有很多的小推车
      • 方法区
        • 存放不会被改变的数据
        • 大家也可以共享,但是轻易不会被修改
      • 堆内存
        • 类似于超市的货架,所有人可以选取或者操作货架上的商品
      • 程序计数器
      • 本地方法栈(这个图就没有画方法区,后面讲了静态再说)
        面向对象学习(一)_第2张图片

方法的重载

  • 假设你有一个女朋友,女朋友有一个接收礼物的方法
  • 重载是指在同一个类中,方法的名字相同,但是方法的参数
    • 数量
    • 类型
    • 顺序
      • 如果参数的类型都是一样的,即使调换顺序也不能构成重载
    • 不同,这种我们成为方法的重载
  • 两同三不同
    • 类和方法名相同
    • 参数的数量类型顺序不同
  • 返回值类型不同不能成为重载的判断依据
  • 当我们调用重载方法的时候,会根据参数的类型就近选择合适的方法
  • 即使参数的类型和形参的类型不匹配也没有问题,他会进行自动的转换

构造器Constructor

  • 构造器是为了初始化对象的,每次创建对象之后都会默认调用构造器

  • 每一个类都有一个默认的空构造器

  • 如果你一旦自定义了构造器,那么默认的构造器就会失效,将来我们很多时候需要手动定义空构造器

  • 语法格式

    • 不能写返回值
    • 构造器的名字必须和类名完全相同
  • 构造器是一个比较特殊的方法,特殊在不写返回值

    • 其实构造器有返回值就是你创建的对象
    • 为了体现构造器的特殊性,我们不需要写返回值类型和return
  • 构造器根据业务需求也可以进行重载

    • 类型 数量 顺序
  • 其实我们学习构造器,很多概念和方法时很类似的

String

  • String是基本数据类型还是引用数据类型?
  • 引用数据类型:基本数据类型只有8种,除此之外全部为引用类型

你可能感兴趣的:(面向对象学习(一))