同系列文章导读:【JavaSE】文章导读

所有文章均在本博客首发,其他平台同步更新

如有问题,欢迎指正(评论区留言即可)

发表评论时请填写正确邮箱,以便于接收通知【推荐QQ邮箱】


类和对象

面向对象和面向过程的思想对比

  • 面向过程编程(Procedure Oriented Programming):是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现
  • 面向对象编程(Object Oriented Programming):是一种以对象为中心的编程思想,通过指挥对象实现具体的功能

    对象:指客观存在的事物 (万物皆对象)

类和对象

  • 类是对现实生活中一类具有共同属性行为的事物的抽象

    【类】是对事物,也就是对象的一种描述,可以将类理解为一张设计图,根据设计图,可以创建出具体存在的事物

  • 类的组成

    • 属性:该事物的各种特征
    • 行为:该事物存在的功能(能够做的事情)
  • 对象:是能够看得到摸得着的真实存在的实体

类是对对象的描述

对象是类的实体

一个类可以创建出多个对象

类的定义

  • 类的组成:属性行为

    • 属性:在代码中通过成员变量来体现(类中方法外的变量)
    • 行为:在代码中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
  • 类的定义步骤

    • 定义类
    • 编写类的成员变量
    • 编写类的成员方法
public class 类名{
    // 成员变量
    变量1的数据类型 变量1;
    String name;        // 未赋值默认null
    变量2的数据类型 变量2;
    int age;            // 未赋值默认0
    ......
    // 成员方法
    方法1;
    public void study(){
        System.out.println("学习");
    }
    方法2;
    ......
}

对象的创建和使用

  • 创建对象

    格式:类名 对象名 = new 类名();

  • 使用对象

    使用成员变量:对象名.变量名

    使用成员方法:对象名.方法名();

  • 案例
// 需求:定义一个类,然后定义一个手机测试类,在手机测试类中通过对象完成成员变量和成员方法的使用
public class Phone{
  // 成员变量:品牌、价格、....
  String brand;
  int price;
  // 成员方法:打电话、发短信、....
  public void call(String name){
      System.out.println("给" + name + "打电话");
  }
  public void sendMessage(){
      System.out.println("群发短信");
  }
}

对象内存图

  • 单个对象内存图

单个对象内存图.png

  • 两个对象内存图

两个对象内存图.png

  • 两个引用指向同一对象内存图

    • 垃圾回收

      注意:当堆内存中,对象数组产生的地址,通过任何方式都不能被找到后,就会被判定为内存中的 “垃圾”

      垃圾会被Java垃圾回收器,空闲的时候自动进行清理

  • 成员变量和局部变量

    • 成员变量:类中方法外的变量;存放于堆内存;随着对象的存亡而存亡;有默认的初始化值
    • 局部变量:方法中的变量;存放于栈内存;随着方法调用存在,方法调用完毕结束;无默认初始化值,必须先定义、赋值再使用

封装

  • private关键字:权限修饰符,可以用来修饰成员,来提高数据的安全性

    特点:只能在本类当中进行访问,外界需要访问可以定义方法来进行设置值获取值

    针对private修饰的成员变量,如果需要被其他类引用,提供相应的操作

    • 提供get变量名();方法,用于获取成员变量的值,方法用public修饰
    • 提供set变量名();方法,用于设置成员变量的值,方法用public修饰
// 新建Student类
public class Student{
  private String name;
  private int age;

  public void setName(String n){
      name = n;
  }
  public String getName(){
      return name;
  }
  public void setAge(int a){
      age = a;
  }
  public int getAge(){
      return age;
  }
  public void show(){
      System.out.println(name + age);
  }
}
  • this关键字:可以调用本类的成员(变量,方法),解决局部变量和成员变量重名问题

    局部变量和成员变量如果重名,Java使用的是就近原则

    this代表所在类的对象引用,方法被哪个对象调用,this就代表哪个对象

public class Student{
  private int age;
  public void method(int age){
      this.age = age;            // 添加this关键字,使前一个age成为成员变量,再将局部变量age赋值过去
  }
}
  • this内存原理
  • 封装

    • 面向对象三大特征之一(封装继承多态
    • 隐藏实现细节,仅对外暴露公共的访问方式(类似于插线板)
    • 常见体现:

      • 代码抽取到方法中,是对代码的一种封装;将属性抽取到中,是对数据的一种封装
      • 私有的成员变量,提供setXxx和getXxx方法
    • 好处

      • 提高了代码的安全性
      • 提高了代码的复用性

构造方法

  • 构建、创造对象的时候,所调用的方法
  • 格式:

    1. 方法名与类名相同,大小写也要一致
    2. 没有返回值类型,连void也没有
    3. 没有具体的返回值(不能由return带回结果数据)
public class Student{
  public Student(){
      System.out.println("这是Student类的构造方法");
  }
}
  • 执行时机:

    1. 创建对象的时候调用,每创建一次对象,就会执行一次构造方法
    2. 不能手动调用构造方法
  • 作用:用于给对象的数据 (属性) 进行初始化
class Student{
  private int age;
  public Student(int age){
      this.age = age;
  }
}
  • 注意事项

    构造方法的创建:

    • 如果没有定义构造方法,系统将给出一个默认无参数的构造方法
    • 如果定义了构造方法,系统将不再提供默认的构造方法
  • 标准类的代码编写和使用
/*
    JavaBean类:封装数据的类
*/
public class Student{
  // 私有变量
  private String name;
  private int age;

  // 无参数构造方法
  public Student(){}
  //有参数构造方法
  public Student(String name, int age){
      this.name = name;
      this.age = age;
  }

  //set/get方法
  public void setName(String name){
      this.name = name;
  }

  public String getName(){
      return name;
  }

  public void setAge(int age){
      this.age = age;
  }

  public String getAge(){
      return age;
  }
}

推荐阅读:【JavaSE】API基础

最后修改:2022 年 04 月 16 日
如果觉得我的文章对你有用,请随意赞赏