• 面向对象之属性与方法


    一、属性(field)

    1. 语法格式:修饰符 数据类型 属性名 = 初始化值
      • 修饰符:常用的权限修饰符有:private、缺省、protected、public
      • 数据类型:任何基本数据类型(如int、Boolean) 或 任何引用数据类型
      • 属性名:属于标识符,符合命名规则和规范即可
      • 注:接口中,常量的声明格式:public static final 数据类型   变量名 =  初始化值

    2.变量的分类

     1)成员变量

      • 实例变量
        • 不以static修饰
        • 先声明,后使用
        • 实例变量有其所在的一个作用域{},只有在其定义的作用域中有效
        • 随着对象的创建而产生,分配在堆空间
        • 可以采用默认初始化,也可以采用其他方式进行初始化
        • 每个对象均拥有一份实例变量,通过对象.属性修改此实例变量
        • 可以声明权限修饰符;修饰符有:public 、缺省 、protected、private 
      • 类变量
        • 采用static关键词修饰
        • 采用“类名.类变量”的方法调用
        • 随着类的加载而产生,分配在方法区,类变量早于方法的创建
        • 类变量为类的所有对象共享,一经改变,后续调用为改变后的值

       2)局部变量

      • 局部变量声明在:方法内、方法的形参、内部类、代码块、构造器(构造器的形参)
      • 局部变量需要先声明赋值,后使用,也可采用默认的初始化值。注意:方法的形参为特殊,它的初始化为方法调用时传入的值

      • 局部变量没有权限修饰符,它的权限跟随方法,或者构造器的权限;
      • 局部变量存放在栈空间

       3)成员变量(属性)和局部变量的区别

        4)内存位置

      3.属性的赋值操作

      • 默认初始化赋值:当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用类型
      • 赋值顺序:① 默认初始化 --> ②显式初始化 / ③ 代码块初始化-->④  构造器初始化 -->⑤ 变量名. 方法 或者 变量名. 属性
      • 显式初始化和代码块初始化的顺序为声明的顺序,谁在前声明赋值,谁先赋值;(顺序:① ② ③ ④ ⑤ 或者①  ③② ④ ⑤  ) 

    二、方法(method)

      1.概念

      • 方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程
      • 将功能封装为方法的目的是可以实现代码重用,简化代码
      • Java里的方法不能独立存在,所有的方法必须定义在类里

      2.方法的声明格式:权限修饰符 返回值类型 方法名(形参列表){ 方法体;}

      • 权限修饰符:private、public、缺省、protected
      • 返回值类型:有返回值  vs 没有返回值方法名:属于标识符。
        • 如果方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不需要使用return,但是如果使用的话,只能“return;”表示结束此方法的意思
        • 如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的变量或常量:“return 数据”
        • return关键字的使用:
          • 1.使用范围:使用在方法体中
          • 2.作用:① 结束方法;② 针对于有返回值类型的方法,使用"return 数据"方法返回指定类型的数据
          • 3.注意点:return关键字后面不可以声明执行语句
      • 需要命名时,满足标识符的命名规则和规范,"见名知意“
      • 形参列表:可以声明0个,1个或多个变量。如果声明了多个变量,中间用","隔开
      • 方法体:调用方法时,要执行的逻辑

      3.方法的分类:按照是否有形参及返回值

      4. 方法的调用

      • ① 方法中可以调用属性、方法
      • ② 静态的方法只能调用静态的方法和属性;非静态的方法可以调用静态的方法和属性也可以调用非静态的方法和属性。静态的方法和属性均是采用static关键字修饰的
      • ③方法中可以声明内部类,方法中只能调用方法或属性,方法中不可以定义新的方法

      5.方法的重载和重写

      • 方法的重载(overload)
        • 重载的定义:在同一个类中定义多个同名的方法,且参数不同
        • "两同一不同":同一个类、相同方法名;参数列表不同:参数个数不同,参数类型不同
        • 跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系
      • 方法的重写(override/overwrite) 
        • 重写的定义:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作。子类中的叫重写的方法,父类中的叫被重写的方法。重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写父类的方法
        • 重写的要求:
          • ① 子类重写方法必须和父类被重写方法具有相同的方法名称、参数列表
          • ② 返回值类型:
            • >父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void
            • >父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A类的子类
            • >父类被重写的方法的返回值类型是基本数据类型(比如:double),则子类重写的方法的返回值类型必须是相同的基本数据类型(必须也是double)
          • ③ 子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符。特殊情况:子类不能重写父类中声明为private权限的方法
          • ④ 子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
          • 注:关键字static:
            • 子类和父类中的同名同参数的方法都声明为非static的。此时才会考虑是方法的重写
            • 子类和父类中的同名同参数的方法都声明为static的。此时不叫方法的重写
            • 子类和父类中的同名同参数的方法个别声明为static的。会直接报错
            • 因为static方法是属于类的,子类无法覆盖父类的方法
        • 注:用final关键词修饰的方法,不能重写

      6.可变个数的形参

      • 概念:允许直接定义能和多个实参相匹配的形参
        • JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量。public static void test(int a ,String[] books);
        • JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量。public static void test(int a ,String…books);
      • 具体使用:
        • 1 可变个数形参的格式:数据类型 ... 变量名
        • 2 当调用可变个数形参的方法时,传入的参数个数可以是:0个、1个、2个。。。
        • 3 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
        • 4 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存
        • 5 可变个数形参在方法的形参中,必须声明在末尾
        • 6  可变个数形参在方法的形参中,最多只能声明一个可变形参

      7.方法的递归(recursion)

      • ① 递归方法:一个方法体内调用它自身
      • ②方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制
      • ③递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环

      8.方法的值传递

      • 关于变量的赋值
        • 如果变量是基本数据类型,此时赋值的是变量所保存的数据值
        • 如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值

      • 方法参数的值传递机制

        • 方法的参数概念:形参:方法定义时,声明的小括号内的参数;实参:方法调用时,实际传递给形参的数据

        • 值传递机制:1、形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参

        • 2、形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参

     

     

  • 相关阅读:
    从零开始整SpringBoot-工具与插件
    算法与数据结构学习笔记(目录)
    牛客小白月赛30(个人题解)
    Manjaro 上手使用简明教程
    C++函数:std::tie 详解
    Educational Codeforces Round 99 (Rated for Div. 2) (A ~ F)个人题解
    VS Code C++ 项目快速配置模板
    【字符串算法】字典树详解
    关于算法竞赛某些常见基础错误
    Teacher Ma专场
  • 原文地址:https://www.cnblogs.com/zhufeng123/p/12333476.html
Copyright © 2020-2023  润新知