15 面向对象

面向对象

面向过程&面向对象

  • 面向过程思想
    • 步骤清晰简单,第一步做什么,第二步做什么…
    • 面向过程适合处理一些较为简单的问题
  • 面向对象思想
    • 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考。最后,才对某个分类下的细节进行面向过程的思索。
    • 面向对象适合处理复杂的问题,适合处理需要多人协作的问题!
  • 对于描述复杂的事物,为了从宏观上把握、从整体上合理分析,我们需要使用面向对象的思路来分析整个系统。但是,具体到微观操作,仍然需要面向过程的思路去处理

什么是面向对象

  • 面向对象编程(Object- Oriented Programming,OOP)
  • 面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据
  • 抽象
  • 三大特性:
    • 封装
    • 继承
    • 多态
  • 从认识论角度考虑是先有对象后有类。对象,是具体的事物。类,是抽象的,是对对象的抽象
  • 从代码运行角度考虑是先有类后有对象。类是对象的模板

回顾方法及加深

  • 方法的定义

    • 修饰符
    • 返回类型
    • break:跳出switch,结束循环和return的区别
    • 方法名:注意规范就OK 见名知意
    • 参数列表:(参数类型,参数名)…
    • 异常抛出:
  • 方法的调用:

    • 静态方法
    • 非静态方法
    • 形参和实参
    • 值传递和引用传递
    • this关键字
  • 注意点

    • 非静态方法可以调用静态方法/属性和非静态方法/属性
    • 静态方法可以调用静态方法/属性,但无法调用非静态方法/属性
  • 值传递与引用传递

    • 当方法的参数为基本类型时,采用的是值传递
    • 引用传递:对象,本质还是值传递
    • 数组也是一个对象,所以数组也是引用传递
  • this关键字

    • this用于指代自身类中的变量或方法
  • String

    • public static void main(String[] args) {
              String c ="abc";
              System.out.println(c);	//输出为 abc
              f(c);
              System.out.println(c);	//输出为 abc
          }
          public static void f(String c){
               c = "ABC";
          }
      /*
      看到这里是不是感觉很奇怪,为什么String明明是引用类型的应该是
      引用传递才对,这里为什么看起来像值传递?然而实际上string采用
      的确实是引用传递,但对string的每一次修改相当于创建了一个新的
      对象
      */
      //下面看一个简单的例子你就明白了
      c="abc";	//假设此时c指向的地址为1000
      //由于对c的内容进行修改相当于创建了一个新的对象
      c="123";	//所以此时c指向的地址发生了改变
      
      
    • /*
      当字符串数组作为参数时,如果是对字符串数组整体修改,那么结果
      跟对字符串修改类似,整个字符串数组均未被修改
      */
      public static void main(String[] args) {
              String[] c = {"abc", "ABC"};
              System.out.println(c[0]);	//输出为 abc
            f(c);
              System.out.println(c[0]);	//输出为 abc
          }
      
          public static void f(String[] c) {
              c = new String[]{"123", "456"};
          }
      
    • /*
      当字符串数组作为参数时,如果是对字符串数组局部修改(通过下
      标修改),那么结果是单个字符串被修改
      */
      public static void main(String[] args) {
              String[] c = {"abc", "ABC"};
            System.out.println(c[0]);	//输出为 abc
              f(c);
              System.out.println(c[0]);	//输出为 123
          }
      
          public static void f(String[] c) {
              c[0] = "123";
          }
      
    • Java基本数据类型传递参数时是值传递;引用类型传递参数时是引用传递。

    • 值传递时,将实参的传递一份给形参;引用传递时,将实参的地址值传递一份给形参。

    • 值传递时,实参把它的传递给对应的形参,函数接收的是原始值的一个拷贝,此时内存中存在两个相等的基本类型,即实参和形参后面方法中的操作都是对形参这个值的修改,不影响实参的值。引用传递时,实参的引用(地址,而不是参数的值)被传递给方法中相对应的形参,函数接收的是原始值的内存地址;在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象。

    • 需要特殊考虑String,以及Integer、Double等几个基本类型包装类,它们都是immutable类型,因为没有提供自身修改的函数,每次操作都是新创建一个对象,所以要特殊对待。因为最后的操作不会修改实参,可以认为是和基本数据类型相似,为值传递。

  • 字符串常量池

类与对象的关系.

  • 类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物
    • 动物、植物、手机、电脑…
    • Person类、Pet类、 Car类等, 这些类都是用来描述/定义某一类具体的事物应该具备的特点和行为
  • 对象是抽象概念的具体实例
    • 张三就是人的一个具体实例,张三家里的旺财就是狗的一个具体实例
    • 能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念

创建与初始化对象

  • 使用new关键字创建对象

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

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

    • 必须和类的名字相同

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

    • 默认构造器为 public 类名(){}

    • 构造器方法也可以重载,当出用户定义了一个构造器方法(无论此方法是否有参)时,默认构造器方法将不复存在

    • 构造器虽然没有返回类型,但也可以使用return

    • 必须和类的名字相同

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

    • 默认构造器为 public 类名(){}

    • 构造器方法也可以重载,当出用户定义了一个构造器方法(无论此方法是否有参)时,默认构造器方法将不复存在

    • 构造器虽然没有返回类型,但也可以使用return

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天才东西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值