【Java实战项目】【超详细过程】—大饼的图片服务器2

news2024/11/26 10:31:30

代码操作数据库

  • pom.xml
    • 1.juit
    • 2.gson
    • 3.mysql依赖
    • 4.servlet
  • DBUtil类
  • Image类
  • ImageDao类

本文主要讲述了用代码对数据库的操作,maven项目创建后进行如下操作:
maven项目创建可以看这里:Servlet-day01 这里面有详细介绍


pom.xml

pom.xml中放置了许多外部包

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <!--
  <groupId>org.example</groupId>
  <artifactId>untitled15</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>
  -->

  <groupId>com.bit</groupId>
  <artifactId>java_image_servlet</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>


  <name>untitled15 Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <!--json的依赖 gosn-->
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.10.1</version>
    </dependency>
    <!--mysql依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.13</version>
    </dependency>
    <!--上传文件的第三方仓库FileUpload-->
    <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
    </dependency>

    <!--servlet包-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <!--表示在开发阶段需要此依赖,部署到Tomcat后就不需要了-->
      <scope>provided</scope>

    </dependency>

  </dependencies>

  <build>
    <!--指定最终包的名称-->
    <finalName>java_image_servlet</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

这些包中的具体内容以及如何加入的后续都会一一解释,首先我们这里解释一下这几个在这里插入图片描述

1.juit

   <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

用于在Java项目中添加JUnit测试框架。JUnit是一个用于编写和运行单元测试的框架,可以帮助开发者确保他们的代码能够按照预期工作。

2.gson

   <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.10.1</version>
    </dependency>

用于在Java项目中添加Google的Gson库。Gson是一个用于处理JSON数据的Java库,可以将Java对象转换为JSON字符串,也可以将JSON字符串转换为Java对象

3.mysql依赖

   <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.13</version>
    </dependency>

用于在Java项目中添加MySQL的JDBC驱动。这个驱动允许Java程序与MySQL数据库进行交互。

4.servlet

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <!--表示在开发阶段需要此依赖,部署到Tomcat后就不需要了-->
      <scope>provided</scope>
    </dependency>

用于在Java Web应用程序中添加Servlet API。Servlet API提供了一组接口和类,用于开发基于Java的Web应用程序。


DBUtil类

在Java目录下创建dao包(数据访问层,蔚然数据库展开操作),在dao包中创建DBUtil类
JDBC相关操作不清楚可以看这篇文章:0基础速成Java环境下JDBC编程(细节超全,保姆级教程)

package dao;

import com.mysql.cj.jdbc.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.concurrent.SynchronousQueue;

public class DBUtil {
    //获取数据库连接
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/image_table?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "123456";
    private static volatile DataSource dataSource = null;

    public static DataSource getDataSource(){
        if(dataSource == null){
            Synchronized(DBUtil.class);{
                if(dataSource == null){
                    dataSource = new MysqlDataSource();
                    // MysqlDataSource 对象强制转换为 MysqlDataSource 类型,
                    // 并使用 setURL()、setUser() 和 setPassword() 方法设置数据库连接的相关信息,包括 URL、用户名和密码。
                    MysqlDataSource tmpDataSour = (MysqlDataSource) dataSource;
                    tmpDataSour.setURL(URL);
                    tmpDataSour.setUser(USERNAME);
                    tmpDataSour.setPassword(PASSWORD);
                }
            }

        }

        return dataSource;
    }
    //建立连接
    public static Connection getConnection() throws SQLException {
        return getDataSource().getConnection();
    }
    //关闭连接
    public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) throws RuntimeException {
        if(resultSet != null) {

            try {
                resultSet.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        if(preparedStatement != null){
            try {
                preparedStatement.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        if (connection != null){
            try {
                connection.close();
            } catch (SQLException e) {
                throw new RuntimeException(e);
            }
        }
        }
    private static void Synchronized(Class<DBUtil> dbUtilClass) {
    }
}

Image类

在java目录下的dao包中创建Image类

package dao;

public class Image {
    private int imageId;//图片ID
    private String imageName;//图片名字
    private int size;//图片大小
    private String uploadTime;//图片上传时间
    private String contentType;//图片类型
    private String path;//图片存储路径
    private String md5;//图片md5校验和
}

自动生成get和set方法:alt+ins 选择Getter and Setter 全选,按下OK
自动生成toString方法:alt+ins 选择toString… 全选,按下OK
最后结果:

package dao;

public class Image {
    private int imageId;//图片ID
    private String imageName;//图片名字
    private int size;//图片大小
    private String uploadTime;//图片上传时间
    private String contentType;//图片类型
    private String path;//图片存储路径
    private String md5;//图片md5校验和

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }

    public String getMd5() {
        return md5;
    }

    public void setMd5(String md5) {
        this.md5 = md5;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public String getContentType() {
        return contentType;
    }

    public void setContentType(String contentType) {
        this.contentType = contentType;
    }

    public String getUploadTime() {
        return uploadTime;
    }

    public void setUploadTime(String uploadTime) {
        this.uploadTime = uploadTime;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public String getImageName() {
        return imageName;
    }

    public void setImageName(String imageName) {
        this.imageName = imageName;
    }

    @Override
    public String toString() {
        return "Image{" +
                "imageId=" + imageId +
                ", imageName='" + imageName + '\'' +
                ", size=" + size +
                ", uploadTime='" + uploadTime + '\'' +
                ", contentType='" + contentType + '\'' +
                ", path='" + path + '\'' +
                ", md5='" + md5 + '\'' +
                '}';
    }
}

ImageDao类

在java目录下的dao包中创建ImageDao类,借助此类完成对数据库的增删改查

package dao;

import common.JavaImageServerException;
import sun.awt.image.ImageDecoder;

import javax.imageio.IIOImage;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

//对数据库中的对象进行操作,增删改查操作
public class ImageDao {
    //新增数据/插入数据(把image对象插入数据库中)
    public void insert(Image image) throws SQLException {
        /*
        1.与数据库建立链接    Connection connection = DBUtil.getConnection();
        2.创建并拼接SQL语句   String SQL= " ";   PreparedStatement statement = connection.prepareStatement(SQL);注意处理异常try/catch
        3.执行SQL语句        statement.setString(1,image.getImageName());
        4.关闭数据库连接      DBUtil.close(connection,statement,null); 注意是否一定会执行此语句
        */
        //获取数据库连接:
        Connection connection = DBUtil.getConnection();
        //构造并拼接SQL语句
        String SQL = "INSERT INTO image VALUES(null,?,?,?,?,?,?)";
        PreparedStatement statement = null;
        try {
            statement = connection.prepareStatement(SQL);
            //这行代码是用于创建一个 PreparedStatement 对象,该对象使用连接对象和要执行的 SQL 语句进行初始化。
            //PreparedStatement 对象允许您向数据库发送 SQL 查询,从而有助于防止 SQL 注入攻击。它还允许您多次使用相同的 SQL 语句和不同的参数。
            //在这个例子中,SQL 语句存储在变量 SQL 中,连接对象存储在变量 connection 中。
            // 通过调用 connection 对象的 prepareStatement() 方法来创建一个新的 PreparedStatement 对象,并将其分配给变量 statement。
            statement.setString(1,image.getImageName());
            statement.setInt(2,image.getSize());
            statement.setString(3,image.getUploadTime());
            statement.setString(4,image.getContentType());
            statement.setString(5,image.getPath());
            statement.setString(6,image.getMd5());
            int ret = statement.executeUpdate();
            //这段代码是使用 JDBC API 执行 SQL 语句并返回受影响的行数。
            // 其中,statement 是一个 Statement 对象,表示要执行的 SQL 语句;executeUpdate() 方法用于执行 SQL 语句,并返回受影响的行数。
            // 在这个例子中,ret 变量将保存执行 SQL 语句后受影响的行数。如果执行成功,ret 的值将为正数,否则为负数。
            if(ret != 1){
                //ret不等于1时代表SQL语句执行失败,此时应该抛出一个异常
                throw new JavaImageServerException("插入数据库出错");

            }

        } catch (SQLException e) {
            throw new RuntimeException(e);
        } catch (JavaImageServerException e) {
            throw new RuntimeException(e);
        }finally {
            //关闭连接
            DBUtil.close(connection,statement,null);
        }


    }

    //查找数据库重点信息,查找全部
    public List<Image> selectAll()throws SQLException {
        /*
        1.与数据库建立链接  Connection connection = DBUtil.getConnection();
        2.创建并拼接SQL语句   String SQL= " ";   PreparedStatement statement = connection.prepareStatement(SQL);
        3.执行SQL语句
        4.处理结果集
        5.断开连接
        存放结果集:
         */
        List<Image> images = new ArrayList<>();//查找所有的结果返回不止一条数据,所以用列表存放结果集
        Connection connection = DBUtil.getConnection();//建立数据库连接
        String SQL = "select *from image;";//构造SQL语言
        PreparedStatement statement = null;//statement 用于拼接SQL语言
        ResultSet resultSet = null;
        try{
            statement = connection.prepareStatement(SQL);//拼接SQL语言
            //执行SQL
            resultSet = statement.executeQuery();
            while (resultSet.next()){
                Image image = new Image();
                image.setImageId(resultSet.getInt("imageID"));
                image.setImageName(resultSet.getString("imageName"));
                image.setSize(resultSet.getInt("size"));
                image.setUploadTime(resultSet.getString("uploadTime"));
                image.setContentType(resultSet.getString("contentType"));
                image.setPath(resultSet.getString("path"));
                image.setMd5(resultSet.getString("Md5"));
                images.add(image);
            }
            return images;

        }catch (SQLException e){
            e.printStackTrace();
        }finally {
            DBUtil.close(connection,statement, resultSet);
        }

        return null;

    }

    //查找数据库中的图片,按照imageID查找
    public Image selectOneId(int imageId) throws SQLException{
        /*
        1.与数据库建立链接  Connection connection = DBUtil.getConnection();
        2.创建并拼接SQL语句   String SQL= " ";   PreparedStatement statement = connection.prepareStatement(SQL);
        3.执行SQL语句
        4.处理结果集
        5.断开连接
         */
        Connection connection = DBUtil.getConnection();
        String SQL= "select * from image where imageId = ?";
        PreparedStatement statement = null;
        ResultSet resultSet = null;
        try {
            statement = connection.prepareStatement(SQL);
            statement.setInt(1,imageId);
            resultSet = statement.executeQuery();
            if (resultSet.next()) {
                Image image = new Image();
                image.setImageId(resultSet.getInt("imageID"));
                image.setImageName(resultSet.getString("imageName"));
                image.setSize(resultSet.getInt("size"));
                image.setUploadTime(resultSet.getString("uploadTime"));
                image.setContentType(resultSet.getString("contentType"));
                image.setPath(resultSet.getString("path"));
                image.setMd5(resultSet.getString("Md5"));
                return image;

            }
        }catch (SQLException e){
            e.printStackTrace();
        }finally {
            DBUtil.close(connection,statement,resultSet);
        }

        return null;
    }

    //删除数据库中的图片,按照imageID删除
    public void deleteOneId(int imageId) throws SQLException, JavaImageServerException {
        /*
        1.与数据库建立链接  Connection connection = DBUtil.getConnection();
        2.创建并拼接SQL语句   String SQL= " ";   PreparedStatement statement = connection.prepareStatement(SQL);
        3.执行SQL语句
        4.断开连接
         */
        Connection connection = DBUtil.getConnection();
        String SQL= "delete from image where imageId = ?";
        PreparedStatement statement = null;
        statement = connection.prepareStatement(SQL);
        statement.setInt(1,imageId);
        int ret = statement.executeUpdate();
        if (ret != 1) {
            //ret不等于1说明SQL没有执行,删除操作失败
            throw new JavaImageServerException("删除图片信息出错");
        }
        DBUtil.close(connection,statement,null);

    }

    public static void main1(String[] args) throws SQLException {
        //插入图片信息测试代码
        Image image = new Image();
        image.setImageName("图片4");
        image.setSize(43);
        image.setUploadTime("230831");
        image.setContentType("图片4/png");
        image.setPath("../image/图片4.png");
        image.setMd5("12kwe21");
        ImageDao imageDao = new ImageDao();
        imageDao.insert(image);

    }

    public static void main(String[] args) throws SQLException {
        //查找全部图片信息测试代码
        ImageDao imageDao = new ImageDao();
        List<Image> images = imageDao.selectAll();
        System.out.println(images);
    }

    public static void main3(String[] args) throws SQLException {
        //按照imageId查找图片信息测试代码
        ImageDao imageDao = new ImageDao();
        Image image = imageDao.selectOneId(2);
        System.out.println(image);

    }

    public static void main4(String[] args) throws SQLException, JavaImageServerException {
        //测试删除数据库中的图片,根据imageId
        ImageDao imageDao = new ImageDao();
        imageDao.deleteOneId(4);
    }

}


感谢您对大饼的支持
今天的你也很辛苦,晚安,明天见!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/969600.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vulnhub: Inferno: 1.1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.233 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.23380端口目录爆破 gobuster dir -u http://192.168.111.233 -w /usr/share/wordlists/dirbuster/directory-list-2.3-me…

使用Docker配置深度学习的运行环境

文章目录 推荐实验环境前言docker安装docker操作docker配置常见方法&#xff08;安装包、联网、程序管理器&#xff09;安装驱动的前提要求传统方法安装驱动程序程序管理器安装联网安装deb包安装 安装完成后的设置非传统方法安装-通过容器安装驱动的前提要求安装NVIDIA-Contain…

UG\NX CAM二次开发 获取工序类型 UF_OPER_ask_oper_type

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 获取工序类型 UF_OPER_ask_oper_type 效果: 代码: void MyClass::do_it() { int count=0;tag_t * objects;UF_UI_ONT_ask_selected_nodes(&count, &objects);for (int i=0; i<co…

Kotlin语言基础(一)Kotlin语言特性

Kotlin语言概述&#xff08;一&#xff09;- 语言特性 Kotlin是一种高级强类型语言&#xff0c;可以在Java VM上运行。 它具有如下特性&#xff1a; 1.代码简洁&#xff0c;代码量少&#xff0c;易学易懂。 例如&#xff1a; /*** 定义数据类Student* property id String 学…

14. Loadrunner 详细介绍以及使用

目录 1. Loadrunner 环境搭建 2. Loadrunner 介绍 3. Loadrunner 三大组件之间的关系 4. Loadrunner 脚本录制 4.1 WebTours 项目 4.1.1 如何启动项目 4.1.2 如何访问项目 4.1.3 相关配置 4.2 脚本录制 4.3 脚本加强 4.3.1 插入事务 4.3.2 插入集合点 4.3.3 插入检…

Marin说PCB之TDK和Murata电容哪家强?

不是各位朋友是否听说华为新款手机MATE60Pro已经开始发布销售了&#xff0c;小编我听到这个消息后很是震惊啊&#xff0c;这两年老美一直打压我们中国芯片行业的发展&#xff0c;而且拿华为开刀&#xff0c;搞了一些很恶心的手段来限制和打压华为的发展。所以当我听到新款的MAT…

JavaScript基础代码

以下是一些 JavaScript 基础代码示例&#xff1a; 变量定义 // 定义字符串变量 var name "John";// 定义数字变量 var age 30;// 定义布尔变量 var isMarried false;控制语句 // if 语句 if (age > 18) {console.log("成年人"); } else {console.…

点云处理库Open3D基础操作1

文章目录 基础介绍Open3D读取文件Voxel降采样裁剪点云Open3D点云和numpy数组的转换点云的bounding box 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; 基础介绍 Open3D是英特尔公司于2015年发布的开源3D视觉算法库&#xff0c;截至2023年…

QT(9.3)定时器,绘制事件

作业&#xff1a; 自定义一个闹钟 pro文件&#xff1a; QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecat…

C#,《小白学程序》第八课:列表(List)其二,编制《高铁列车时刻表》与时间DateTime

1 文本格式 /// <summary> /// 车站信息类 class /// </summary> public class Station { /// <summary> /// 编号 /// </summary> public int Id { get; set; } 0; /// <summary> /// 车站名 /// </summary&g…

2023年项目进度管理平台排行榜

项目进度管理是项目管理学科中的一门重要课程&#xff0c;通过合理的项目计划&#xff0c;有效控制项目进度&#xff0c;保障项目能够按时交付。 不过&#xff0c;项目进度管理并不是一件简单的工作&#xff0c;不仅需要面对项目过程中各种突发情况&#xff0c;还需要做好团队协…

函数指针与std::function<>对回调函数的实现与性能分析

函数指针与std::function<>都可以作为函数形参&#xff0c;通过接受另一个函数的地址来实现回调函数的功能&#xff0c;但是它们之间的性能差异非常明显。下面分别介绍对回调函数的实现与各自的性能分析。 函数指针与std::function<>对回调函数的实现 先在类中分…

植物大战僵尸植物僵尸表(一)

前言 此文章为“植物大战僵尸”专栏中的第005刊&#xff08;2023年9月第一刊&#xff09;。 警告&#xff1a; 1.仅适用于无名版&#xff1b; 2.可能存在遗漏&#xff0c;如发现请联系作者。 植物表 植物名称植物图片豌豆射手寒冰射手双发豌豆射手机枪射手裂荚射手三线射手…

IDEA提示忽略大小写

IDEA提示忽略大小写 IDEA代码提示默认是区分大小写的&#xff0c;设置为提示忽略大小写&#xff0c;编译我们后期的开发

【Unity编辑器扩展】 | 编辑器扩展 特性(Attribute) 整理总结 | 建议收藏

前言【Unity编辑器扩展】 | 编辑器扩展 特性(Attribute) 整理总结 | 建议收藏Unity中Attribute的作用一、System命名空间SerializableNonSerialized二、UnityEngine命名空间AddComponentMenuAssemblyIsEditorAssemblyColorUsageContextMenuContextMenuItemCreateAssetMenu

单片机第二季:温度传感器DS18B20

目录 1&#xff0c;DS18B20介绍 2&#xff0c;DS18B20数据手册 2.1&#xff0c;初始化时序 2.2&#xff0c;读写时序 3&#xff0c;DS18B20工作流程 4&#xff0c;代码 1&#xff0c;DS18B20介绍 DS18B20的基本特征&#xff1a; (1)内置集成ADC&#xff0c;外部数字接…

nginx-error错误页面

客户访问发生错误时&#xff0c;nginx返回给客户的错误页面。 例&#xff1a;客户访问的资源不存在时&#xff0c;返回302并跳转到一个网站。 2.可以返回200&#xff0c;给客户返回一个401.html的页面&#xff0c;这个页面可以做的友好一点&#xff0c;返回给客户。

【Java实战项目】【超详细过程】—大饼的图片服务器01

目录 一、该图片服务器的功能二、设计数据库设计前后端交互设计新增图片查看所有图片属性查看指定图片属性删除指定图片查看部分图片内容 一、该图片服务器的功能 1.可以选择文件上传或删除 2.拥有防盗功能 3.展示图片 二、设计 数据库设计 图片表中需要储存的数据有&#…

zabbix企业微信告警

目前&#xff0c;企业微信使用要设置可信域名 华为云搜索云函数 创建函数 选择http函数&#xff0c;随便输入函数名字 回到函数列表&#xff0c;选择刚创建的函数&#xff0c;创建触发器&#xff0c;安全模式选择none 点击右上角管理 选刚创建的api&#xff0c;右边操作点…

JVM中JAVA对象和数组内存布局

对象 数组 在Java中&#xff0c;所有的对象都是一种特殊的数组&#xff0c;它们的元素可以是基本数据类型、其他对象引用或者其他任何类型。Java对象和数组的内存布局包含以下部分&#xff1a; 1.对象头&#xff08;Object Header&#xff09; 每个Java对象都有一个对象头&am…