当前位置: 首页 > news >正文

【java第18集】java引用数据类型详解

文章目录

  • 1. 引用数据类型概述
  • 2. 引用数据类型的分类
    • 2.1 类(Class)
    • 2.2 接口(Interface)
    • 2.3 数组(Array)
    • 2.4 枚举(Enum)
  • 3. 引用数据类型与基本数据类型的对比
  • 4. 引用数据类型的使用方法
    • 4.1 声明与初始化
    • 4.2 多态性
    • 4.3 对象比较
  • 5. 引用数据类型的注意事项
    • 5.1 未初始化导致 NullPointerException
    • 5.2 数组的默认值
    • 5.3 包装类(Wrapper Classes)
  • 6. 应用场景
  • 7. 总结

1. 引用数据类型概述

在 Java 中,引用数据类型(Reference Data Types) 是一种通过 引用(内存地址) 访问对象的类型,与基本数据类型(Primitive Data Types)不同。引用数据类型包括 类(Class)接口(Interface)数组(Array)枚举(Enum) 等。

  • 核心特点
    • 存储的是对象的引用(地址),而非对象本身。
    • 对象实际存储在 堆内存(Heap) 中。
    • 默认值为 null(未初始化时)。
    • 支持方法调用和多态性。

2. 引用数据类型的分类

2.1 类(Class)

  • 定义:类是对象的蓝图,定义了一类对象共有的属性和行为。
  • 示例
    public class Person {String name;int age;public Person(String name, int age) {this.name = name;this.age = age;}public void sayHello() {System.out.println("Hello, my name is " + name);}
    }// 使用类
    Person person = new Person("Alice", 30);
    person.sayHello(); // 输出: Hello, my name is Alice
    

2.2 接口(Interface)

  • 定义:接口是一组抽象方法的集合,定义了类应该实现的行为。
  • 示例
    public interface Animal {void eat();void sleep();
    }public class Dog implements Animal {public void eat() {System.out.println("Dog is eating");}public void sleep() {System.out.println("Dog is sleeping");}
    }// 使用接口
    Animal dog = new Dog();
    dog.eat();    // 输出: Dog is eating
    dog.sleep();  // 输出: Dog is sleeping
    

2.3 数组(Array)

  • 定义:数组用于存储固定大小的同类型元素集合。
  • 示例
    // 声明并初始化数组
    int[] numbers = {1, 2, 3, 4, 5};
    for (int number : numbers) {System.out.println(number); // 输出: 1 2 3 4 5
    }// 动态初始化数组
    String[] names = new String[3];
    names[0] = "Alice";
    names[1] = "Bob";
    names[2] = "Charlie";
    

2.4 枚举(Enum)

  • 定义:枚举是一种特殊的引用数据类型,表示一组固定的常量。
  • 示例
    enum Color {RED, GREEN, BLUE
    }// 使用枚举
    Color color = Color.RED;
    switch (color) {case RED:System.out.println("Red color");break;case GREEN:System.out.println("Green color");break;case BLUE:System.out.println("Blue color");break;
    }
    

3. 引用数据类型与基本数据类型的对比

特性基本数据类型引用数据类型
存储内容直接存储值(如 int a = 10存储对象的引用(地址),对象存储在堆内存
默认值有默认值(如 int 默认为 0默认值为 null
是否可为空不可为 null可为 null
是否有方法无方法(除包装类)有方法(如 String.length()
内存分配栈内存堆内存
对象比较使用 == 比较值使用 .equals() 比较内容(需重写)

4. 引用数据类型的使用方法

4.1 声明与初始化

  • 声明数据类型 变量名;
  • 初始化变量名 = new 数据类型构造器();
  • 示例
    // 声明并初始化类对象
    Person person = new Person("Bob", 25);// 声明并初始化数组
    int[] numbers = new int[]{1, 2, 3};// 声明并初始化枚举
    Color color = Color.GREEN;
    

4.2 多态性

  • 接口和父类引用指向子类对象
    Animal animal = new Dog(); // 父类引用指向子类对象
    animal.eat(); // 输出: Dog is eating
    

4.3 对象比较

  • 错误的方式== 比较的是引用地址。
  • 正确的方式:使用 .equals() 比较内容(需重写 equals 方法)。
    String str1 = new String("Hello");
    String str2 = new String("Hello");
    System.out.println(str1 == str2);       // false(地址不同)
    System.out.println(str1.equals(str2));  // true(内容相同)
    

5. 引用数据类型的注意事项

5.1 未初始化导致 NullPointerException

  • 示例
    Person person; // 未初始化,默认值为 null
    person.sayHello(); // 抛出 NullPointerException
    

5.2 数组的默认值

  • 示例
    int[] numbers = new int[5]; // 默认值为 0
    String[] names = new String[3]; // 默认值为 null
    

5.3 包装类(Wrapper Classes)

  • 基本类型与引用类型的桥梁
    • 基本类型包装类:自动装箱(Autoboxing)
    • 包装类基本类型:自动拆箱(Unboxing)
    Integer i = 10; // 自动装箱
    int j = i;      // 自动拆箱
    

6. 应用场景

引用类型典型用途
定义对象模型(如 PersonCar
接口定义通用行为规范(如 RunnableList
数组存储固定大小的同类型数据(如学生成绩列表)
枚举表示固定常量集合(如颜色、星期)

7. 总结

  • 引用数据类型 是 Java 面向对象编程的核心,通过 引用变量 操作堆内存中的对象。
  • 合理选择引用类型(类、接口、数组、枚举)可以提高代码的灵活性和可维护性。
  • 注意事项
    • 初始化后再使用对象,避免 NullPointerException
    • 使用 .equals() 比较对象内容。
    • 利用多态性实现灵活的代码设计。

相关文章:

  • 进程退出 和 僵尸进程、孤儿进程
  • Linux错误处理集合 GLIBCXX_3.4.25‘ not found和 安装glibc-2.28和Error: rpmdb open failed
  • JQuery 禁止页面滚动(防止页面抖动)
  • VS中将控制台项目编程改为WINDOWS桌面程序
  • ai决策平台:AnKo如何推动引领智能化未来?
  • 【PhysUnits】4.5 负数类型(Neg<P>)算术运算(negative.rs)
  • 幻觉、偏见与知识边界——认识并驾驭AI的固有缺陷
  • 交叉引用、多个参考文献插入、跨文献插入word/wps中之【插入[1,3,4]、跨文献插入】
  • 千问大模型部署
  • 2.1.1(数据处理规范)
  • Google设置app-ads.txt
  • Linux串口绑定
  • Chromium 浏览器核心生命周期剖析:从 BrowserProcess 全局管理到 Browser 窗口实例
  • IOS 创建多环境Target,配置多环境
  • Windows 安装显卡驱动
  • leetcode hot100刷题日记——4.盛最多水的容器
  • python重庆旅游系统-旅游攻略
  • DeepSeek 如何实现 128K 上下文窗口?
  • 物流项目第一期(登录业务)
  • 深入理解 Vue2 与 Vue3 响应式系统:丢失场景、原因及解决方案
  • 甘肃白银煤矿透水事故仍有3人失联,现场约510立方米煤泥拥堵巷道
  • 搜狐一季度营收1.36亿美元,净亏损同比收窄超两成
  • 竞彩湃|英超欧冠悬念持续,纽卡斯尔诺丁汉能否拿分?
  • “80后”南京大学天文与空间科学学院教授施勇加盟西湖大学
  • 出走的苏敏阿姨一路走到了戛纳,这块红毯因她而多元
  • 在美国,为什么夏季出生的孩子更容易得流感?