附加:PageHelper分页插件的:Page和PageInfo的区别;

article/2025/9/21 20:59:15

说明:

(1)为什么写本篇博客?:

          ● 在【Spring Boot电商项目29:商品分类模块八:后台的【分类列表(平铺)】接口;】中,实现分页功能时,使用到了PageHelper分页插件;

          ● 但是,在【Spring Boot电商项目29:商品分类模块八:后台的【分类列表(平铺)】接口;】中,我们使用的是PageHelper中的PageInfo对象;

          ● 而,在【MyBatis进阶五:PageHelper分页插件;】中,我们第一次遇到PageHelper时候,使用的是PageHelper中的Page对象;

          ● 所以,本篇博客,就分析一下:PageHelper分页插件中的:Page和PageInfo的区别;

(2)本篇博客参考的博客有:

          ● 【Page和PageInfo】,该文的作者是【程序员^晓洋】;

目录

一:Page和PageInfo;(这儿,归纳了两个对象的属性,总结的不错;)

1. Page和PageInfo简介;

2.Page和PageInfo,具体属性分析;

二:Page和PageInfo:源码;(这部分,仅供参考,爱看不看)

1.Page源码;

2.PageInfo源码;

三:Page和PageInfo:使用;(重要!)

(1)首先,就是开启分页,设置【pageNum:当前页】和【pageSize:每页记录数】;

 (2)然后,我们会利用Mybatis,根据上面设置的分页条件,去查询数据库,得到查询结果;

(3)然后,可以根据前端对分页数据格式的要求,可以把(3)中查到的分页数据,包装成Page对象;

(4)或者,包装成PageInfo对象;

(5)使用Page对象还是使用PageInfo对象?


一:Page和PageInfo;(这儿,归纳了两个对象的属性,总结的不错;)

这儿的内容,完全照抄自【Page和PageInfo】,该文的作者是【程序员^晓洋】;

1. Page和PageInfo简介;

两者都能获取到数据,

Page是一个ArrayListList。

PageInfo是一个对象,能获取到的数据比Page多;

2.Page和PageInfo,具体属性分析;

Page对象:

private int pageNum;	//当前页码
private int pageSize; 	//每页数据的数量
private int startRow;	//始页首行行号
private int endRow;		//尾页尾行行号
private long total;		//总记录数
private int pages;		//总页数
private Boolean reasonable; //分页合理化
private Boolean pageSizeZero; //当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果

PageInfo对象:

    private int pageNum;   			//当前页private int pageSize;			//每页显示数据条数private int size;				//当前页的数量private int startRow; 			//始页首行行号private int endRow;				//尾页尾行行号private long total;				//总记录数private int pages;				//总页数private List<T> list;			//查询结果的数据private int firstPage;			//首页private int prePage;			//上一页private int nextPage;			// 下一页private int lastPage;			//最后一页private boolean isFirstPage;	//是不是第一页private boolean isLastPage;		//是不是最后一页private boolean hasPreviousPage;//有没有上一页private boolean hasNextPage;	//有没有下一页private int navigatePages;		//所有导航页号private int[] navigatepageNums;	//导航页码数

二:Page和PageInfo:源码;(这部分,仅供参考,爱看不看)

1.Page源码;

/** The MIT License (MIT)** Copyright (c) 2014-2017 abel533@gmail.com** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated documentation files (the "Software"), to deal* in the Software without restriction, including without limitation the rights* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* copies of the Software, and to permit persons to whom the Software is* furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in* all copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN* THE SOFTWARE.*/package com.github.pagehelper;import java.io.Closeable;
import java.util.ArrayList;
import java.util.List;/*** Mybatis - 分页对象** @author liuzh/abel533/isea533* @version 3.6.0*          项目地址 : http://git.oschina.net/free/Mybatis_PageHelper*/
public class Page<E> extends ArrayList<E> implements Closeable {private static final long serialVersionUID = 1L;/*** 页码,从1开始*/private int pageNum;/*** 页面大小*/private int pageSize;/*** 起始行*/private int startRow;/*** 末行*/private int endRow;/*** 总数*/private long total;/*** 总页数*/private int pages;/*** 包含count查询*/private boolean count = true;/*** 分页合理化*/private Boolean reasonable;/*** 当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果*/private Boolean pageSizeZero;/*** 进行count查询的列名*/private String countColumn;/*** 排序*/private String orderBy;/*** 只增加排序*/private boolean orderByOnly;public Page() {super();}public Page(int pageNum, int pageSize) {this(pageNum, pageSize, true, null);}public Page(int pageNum, int pageSize, boolean count) {this(pageNum, pageSize, count, null);}private Page(int pageNum, int pageSize, boolean count, Boolean reasonable) {super(0);if (pageNum == 1 && pageSize == Integer.MAX_VALUE) {pageSizeZero = true;pageSize = 0;}this.pageNum = pageNum;this.pageSize = pageSize;this.count = count;calculateStartAndEndRow();setReasonable(reasonable);}/*** int[] rowBounds* 0 : offset* 1 : limit*/public Page(int[] rowBounds, boolean count) {super(0);if (rowBounds[0] == 0 && rowBounds[1] == Integer.MAX_VALUE) {pageSizeZero = true;this.pageSize = 0;} else {this.pageSize = rowBounds[1];this.pageNum = rowBounds[1] != 0 ? (int) (Math.ceil(((double) rowBounds[0] + rowBounds[1]) / rowBounds[1])) : 0;}this.startRow = rowBounds[0];this.count = count;this.endRow = this.startRow + rowBounds[1];}public List<E> getResult() {return this;}public int getPages() {return pages;}public Page<E> setPages(int pages) {this.pages = pages;return this;}public int getEndRow() {return endRow;}public Page<E> setEndRow(int endRow) {this.endRow = endRow;return this;}public int getPageNum() {return pageNum;}public Page<E> setPageNum(int pageNum) {//分页合理化,针对不合理的页码自动处理this.pageNum = ((reasonable != null && reasonable) && pageNum <= 0) ? 1 : pageNum;return this;}public int getPageSize() {return pageSize;}public Page<E> setPageSize(int pageSize) {this.pageSize = pageSize;return this;}public int getStartRow() {return startRow;}public Page<E> setStartRow(int startRow) {this.startRow = startRow;return this;}public long getTotal() {return total;}public void setTotal(long total) {this.total = total;if (total == -1) {pages = 1;return;}if (pageSize > 0) {pages = (int) (total / pageSize + ((total % pageSize == 0) ? 0 : 1));} else {pages = 0;}//分页合理化,针对不合理的页码自动处理if ((reasonable != null && reasonable) && pageNum > pages) {if(pages!=0){pageNum = pages;}calculateStartAndEndRow();}}public Boolean getReasonable() {return reasonable;}public Page<E> setReasonable(Boolean reasonable) {if (reasonable == null) {return this;}this.reasonable = reasonable;//分页合理化,针对不合理的页码自动处理if (this.reasonable && this.pageNum <= 0) {this.pageNum = 1;calculateStartAndEndRow();}return this;}public Boolean getPageSizeZero() {return pageSizeZero;}public Page<E> setPageSizeZero(Boolean pageSizeZero) {if (pageSizeZero != null) {this.pageSizeZero = pageSizeZero;}return this;}public String getOrderBy() {return orderBy;}public <E> Page<E> setOrderBy(String orderBy) {this.orderBy = orderBy;return (Page<E>) this;}public boolean isOrderByOnly() {return orderByOnly;}public void setOrderByOnly(boolean orderByOnly) {this.orderByOnly = orderByOnly;}/*** 计算起止行号*/private void calculateStartAndEndRow() {this.startRow = this.pageNum > 0 ? (this.pageNum - 1) * this.pageSize : 0;this.endRow = this.startRow + this.pageSize * (this.pageNum > 0 ? 1 : 0);}public boolean isCount() {return this.count;}public Page<E> setCount(boolean count) {this.count = count;return this;}/*** 设置页码** @param pageNum* @return*/public Page<E> pageNum(int pageNum) {//分页合理化,针对不合理的页码自动处理this.pageNum = ((reasonable != null && reasonable) && pageNum <= 0) ? 1 : pageNum;return this;}/*** 设置页面大小** @param pageSize* @return*/public Page<E> pageSize(int pageSize) {this.pageSize = pageSize;calculateStartAndEndRow();return this;}/*** 是否执行count查询** @param count* @return*/public Page<E> count(Boolean count) {this.count = count;return this;}/*** 设置合理化** @param reasonable* @return*/public Page<E> reasonable(Boolean reasonable) {setReasonable(reasonable);return this;}/*** 当设置为true的时候,如果pagesize设置为0(或RowBounds的limit=0),就不执行分页,返回全部结果** @param pageSizeZero* @return*/public Page<E> pageSizeZero(Boolean pageSizeZero) {setPageSizeZero(pageSizeZero);return this;}/*** 指定 count 查询列** @param columnName* @return*/public Page<E> countColumn(String columnName) {this.countColumn = columnName;return this;}public PageInfo<E> toPageInfo() {PageInfo<E> pageInfo = new PageInfo<E>(this);return pageInfo;}public PageSerializable<E> toPageSerializable() {PageSerializable<E> serializable = new PageSerializable<E>(this);return serializable;}public <E> Page<E> doSelectPage(ISelect select) {select.doSelect();return (Page<E>) this;}public <E> PageInfo<E> doSelectPageInfo(ISelect select) {select.doSelect();return (PageInfo<E>) this.toPageInfo();}public <E> PageSerializable<E> doSelectPageSerializable(ISelect select) {select.doSelect();return (PageSerializable<E>) this.toPageSerializable();}public long doCount(ISelect select) {this.pageSizeZero = true;this.pageSize = 0;select.doSelect();return this.total;}public String getCountColumn() {return countColumn;}public void setCountColumn(String countColumn) {this.countColumn = countColumn;}@Overridepublic String toString() {return "Page{" +"count=" + count +", pageNum=" + pageNum +", pageSize=" + pageSize +", startRow=" + startRow +", endRow=" + endRow +", total=" + total +", pages=" + pages +", reasonable=" + reasonable +", pageSizeZero=" + pageSizeZero +'}' + super.toString();}@Overridepublic void close() {PageHelper.clearPage();}
}

2.PageInfo源码;

/** The MIT License (MIT)** Copyright (c) 2014-2017 abel533@gmail.com** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated documentation files (the "Software"), to deal* in the Software without restriction, including without limitation the rights* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell* copies of the Software, and to permit persons to whom the Software is* furnished to do so, subject to the following conditions:** The above copyright notice and this permission notice shall be included in* all copies or substantial portions of the Software.** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN* THE SOFTWARE.*/package com.github.pagehelper;import java.util.Collection;
import java.util.List;/*** 对Page<E>结果进行包装* <p/>* 新增分页的多项属性,主要参考:http://bbs.csdn.net/topics/360010907** @author liuzh/abel533/isea533* @version 3.3.0* @since 3.2.2* 项目地址 : http://git.oschina.net/free/Mybatis_PageHelper*/
@SuppressWarnings({"rawtypes", "unchecked"})
public class PageInfo<T> extends PageSerializable<T> {//当前页private int pageNum;//每页的数量private int pageSize;//当前页的数量private int size;//由于startRow和endRow不常用,这里说个具体的用法//可以在页面中"显示startRow到endRow 共size条数据"//当前页面第一个元素在数据库中的行号private int startRow;//当前页面最后一个元素在数据库中的行号private int endRow;//总页数private int pages;//前一页private int prePage;//下一页private int nextPage;//是否为第一页private boolean isFirstPage = false;//是否为最后一页private boolean isLastPage = false;//是否有前一页private boolean hasPreviousPage = false;//是否有下一页private boolean hasNextPage = false;//导航页码数private int navigatePages;//所有导航页号private int[] navigatepageNums;//导航条上的第一页private int navigateFirstPage;//导航条上的最后一页private int navigateLastPage;public PageInfo() {}/*** 包装Page对象** @param list*/public PageInfo(List<T> list) {this(list, 8);}/*** 包装Page对象** @param list          page结果* @param navigatePages 页码数量*/public PageInfo(List<T> list, int navigatePages) {super(list);if (list instanceof Page) {Page page = (Page) list;this.pageNum = page.getPageNum();this.pageSize = page.getPageSize();this.pages = page.getPages();this.size = page.size();//由于结果是>startRow的,所以实际的需要+1if (this.size == 0) {this.startRow = 0;this.endRow = 0;} else {this.startRow = page.getStartRow() + 1;//计算实际的endRow(最后一页的时候特殊)this.endRow = this.startRow - 1 + this.size;}} else if (list instanceof Collection) {this.pageNum = 1;this.pageSize = list.size();this.pages = this.pageSize > 0 ? 1 : 0;this.size = list.size();this.startRow = 0;this.endRow = list.size() > 0 ? list.size() - 1 : 0;}if (list instanceof Collection) {this.navigatePages = navigatePages;//计算导航页calcNavigatepageNums();//计算前后页,第一页,最后一页calcPage();//判断页面边界judgePageBoudary();}}public static <T> PageInfo<T> of(List<T> list) {return new PageInfo<T>(list);}public static <T> PageInfo<T> of(List<T> list, int navigatePages) {return new PageInfo<T>(list, navigatePages);}/*** 计算导航页*/private void calcNavigatepageNums() {//当总页数小于或等于导航页码数时if (pages <= navigatePages) {navigatepageNums = new int[pages];for (int i = 0; i < pages; i++) {navigatepageNums[i] = i + 1;}} else { //当总页数大于导航页码数时navigatepageNums = new int[navigatePages];int startNum = pageNum - navigatePages / 2;int endNum = pageNum + navigatePages / 2;if (startNum < 1) {startNum = 1;//(最前navigatePages页for (int i = 0; i < navigatePages; i++) {navigatepageNums[i] = startNum++;}} else if (endNum > pages) {endNum = pages;//最后navigatePages页for (int i = navigatePages - 1; i >= 0; i--) {navigatepageNums[i] = endNum--;}} else {//所有中间页for (int i = 0; i < navigatePages; i++) {navigatepageNums[i] = startNum++;}}}}/*** 计算前后页,第一页,最后一页*/private void calcPage() {if (navigatepageNums != null && navigatepageNums.length > 0) {navigateFirstPage = navigatepageNums[0];navigateLastPage = navigatepageNums[navigatepageNums.length - 1];if (pageNum > 1) {prePage = pageNum - 1;}if (pageNum < pages) {nextPage = pageNum + 1;}}}/*** 判定页面边界*/private void judgePageBoudary() {isFirstPage = pageNum == 1;isLastPage = pageNum == pages || pages == 0;hasPreviousPage = pageNum > 1;hasNextPage = pageNum < pages;}public int getPageNum() {return pageNum;}public void setPageNum(int pageNum) {this.pageNum = pageNum;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}public int getSize() {return size;}public void setSize(int size) {this.size = size;}public int getStartRow() {return startRow;}public void setStartRow(int startRow) {this.startRow = startRow;}public int getEndRow() {return endRow;}public void setEndRow(int endRow) {this.endRow = endRow;}public int getPages() {return pages;}public void setPages(int pages) {this.pages = pages;}public int getPrePage() {return prePage;}public void setPrePage(int prePage) {this.prePage = prePage;}public int getNextPage() {return nextPage;}public void setNextPage(int nextPage) {this.nextPage = nextPage;}public boolean isIsFirstPage() {return isFirstPage;}public void setIsFirstPage(boolean isFirstPage) {this.isFirstPage = isFirstPage;}public boolean isIsLastPage() {return isLastPage;}public void setIsLastPage(boolean isLastPage) {this.isLastPage = isLastPage;}public boolean isHasPreviousPage() {return hasPreviousPage;}public void setHasPreviousPage(boolean hasPreviousPage) {this.hasPreviousPage = hasPreviousPage;}public boolean isHasNextPage() {return hasNextPage;}public void setHasNextPage(boolean hasNextPage) {this.hasNextPage = hasNextPage;}public int getNavigatePages() {return navigatePages;}public void setNavigatePages(int navigatePages) {this.navigatePages = navigatePages;}public int[] getNavigatepageNums() {return navigatepageNums;}public void setNavigatepageNums(int[] navigatepageNums) {this.navigatepageNums = navigatepageNums;}public int getNavigateFirstPage() {return navigateFirstPage;}public int getNavigateLastPage() {return navigateLastPage;}public void setNavigateFirstPage(int navigateFirstPage) {this.navigateFirstPage = navigateFirstPage;}public void setNavigateLastPage(int navigateLastPage) {this.navigateLastPage = navigateLastPage;}@Overridepublic String toString() {final StringBuilder sb = new StringBuilder("PageInfo{");sb.append("pageNum=").append(pageNum);sb.append(", pageSize=").append(pageSize);sb.append(", size=").append(size);sb.append(", startRow=").append(startRow);sb.append(", endRow=").append(endRow);sb.append(", total=").append(total);sb.append(", pages=").append(pages);sb.append(", list=").append(list);sb.append(", prePage=").append(prePage);sb.append(", nextPage=").append(nextPage);sb.append(", isFirstPage=").append(isFirstPage);sb.append(", isLastPage=").append(isLastPage);sb.append(", hasPreviousPage=").append(hasPreviousPage);sb.append(", hasNextPage=").append(hasNextPage);sb.append(", navigatePages=").append(navigatePages);sb.append(", navigateFirstPage=").append(navigateFirstPage);sb.append(", navigateLastPage=").append(navigateLastPage);sb.append(", navigatepageNums=");if (navigatepageNums == null) {sb.append("null");} else {sb.append('[');for (int i = 0; i < navigatepageNums.length; ++i) {sb.append(i == 0 ? "" : ", ").append(navigatepageNums[i]);}sb.append(']');}sb.append('}');return sb.toString();}
}

三:Page和PageInfo:使用;(重要!)

(1)首先,就是开启分页,设置【pageNum:当前页】和【pageSize:每页记录数】;

 (2)然后,我们会利用Mybatis,根据上面设置的分页条件,去查询数据库,得到查询结果;

(3)然后,可以根据前端对分页数据格式的要求,可以把(3)中查到的分页数据,包装成Page对象;

(4)或者,包装成PageInfo对象;

(5)使用Page对象还是使用PageInfo对象?

          ● 目前的个人理解:使用Page对象还是PageInfo对象,需要根据前端的要求,或者说是根据接口对返回数据的格式的要求;

          ● 比如,在【Spring Boot电商项目29:商品分类模块八:后台的【分类列表(平铺)】接口;】中,【分类列表(平铺)接口】的接口文档要求,接口的返回是:

所以,对于这样的接口要求,很自然就是使用PageInfo对象;


http://chatgpt.dhexx.cn/article/cRbC8jbL.shtml

相关文章

JSP之page对象及其常用方法

JSP之page对象及其常用方法

java常用page分页对象,mysql查询

1.创建page对象 public class PageUtils {//当前页默认第一页private Integer page 1;//默认每页10条private Integer limit 10;//总数private Integer count;//开始行private Integer startRow;//结束行private Integer endRow;public PageUtils(){this.startRow (page - …

JSP page对象

JSP内置对象——page对象 一、page对象&#xff1a;是指指向当前JSP页面本身&#xff0c;有点像类中的this指针&#xff0c;它是java.long.Object类的实例。 二、常用方法如下&#xff1a;主要是Object类中声明的方法class getClass() 返回此Object的类 int hashCode() 返回此O…

玩转MyBatis-Plus分页插件一:分页基本使用+方法解释+解析Page对象

hello&#xff0c;我是X&#xff0c;已经快半年的时间没有写过博文了&#xff0c;这段时间里我成长了许多&#xff0c;现在趁着放暑假的功夫&#xff0c;好好的总结一下我上半年的知识储备&#xff0c;信息量较大&#xff0c;赶紧上车吧&#xff01; 上车前晒一张后台系统分页的…

JSP的page对象

一 简介 page对象就是指向当前JSP页面本身&#xff0c;有点像类中的this指针&#xff0c;它是java.lang.Object类的实例。 二 常用方法 三 实例 <% page language "java" import "java.util.*" contentType "text/html; charsetutf-8" %&g…

6.Page对象详解

序 就好像用户看到的都是由dom表现出来的&#xff0c;所有的业务处理都是在Page对象中处理的。如果业务越简单&#xff0c;创建的Page对象数量就会越少&#xff1b;如果业务越复杂&#xff0c;那么相对而言Page对象数量就越多&#xff08;或Page实例对象就会越复杂&#xff09…

java中page的对象,page对象

page对象是JSP九大内置对象之一。JSP全称JavaServerPage&#xff0c;是一种动态网页技术标准&#xff0c;以Java语言作为脚本语言。在JSP中预先定义了九个内置对象,这个九个内置对象不需要声明就可以在脚本代码和表达式中任意使用&#xff0c;九个内置对象分别是&#xff1a;re…

Java程序员经典面试题+答案(全)

这套面试题主要目的是帮助那些还没有java软件开发实际工作经验&#xff0c;而正在努力寻找java软件开发工作的朋友在笔试时更好地赢得笔试和面试。 关注公众号【Java典籍】免费赠送一套Java入门视频教程一套&#xff01; 1、一个".java"源文件中是否可以包括多个类&a…

2023年Java最新面试题,附详解答案

写在前面&#xff1a;本篇面试题整理是我在广州地区进行面试整理得出&#xff0c;常见的基本都在下面了。基本都是可以直接在面试时用白话回答的答案总结&#xff0c;面试时照此回答即可&#xff0c;有其他常见面试问题也欢迎在评论区补充。 首次发布&#xff1a;202 3年 1月 更…

java初中级面试题集锦

目录 基础 &与&&区别 使用 final 关键字修饰一个变量时&#xff0c;是引用不能变&#xff0c;还是引用的对象不能变&#xff1f; 静态变量和实例变量的区别&#xff1f; 是否可以从一个 static 方法内部发出对非 static 方法的调用&#xff1f; ""…

Java程序员面试题(一)JavaSE基础 - 上

如果觉得文章对您有一点点帮助&#xff0c;麻烦帮忙点个赞?哦 目录 一、Java面向对象1. 面向对象都有哪些特性以及你对这些特性的理解2.访问权限修饰符 public、private、protected, 以及不写&#xff08;默认&#xff09;时的区别3.如何理解 clone 对象3.1 为什么要用 clone…

Java面试题200+大全(合适各级Java人员)

前言&#xff1a; 本文整理所得&#xff01;但是内容是很干货的&#xff01;我看了也有帮助。做个分享。该列表包含了入门级 Java 程序员和多年经验的高级开发者的问题。无论你是 1、2、3、4、5、6、7、8、9 还是 10 年经验的开发者&#xff0c;你都能在其中找到一些有趣的问题…

Java 程序员不得不会的 124 道面试题(含答案)

多线程、并发及线程的基础问题 1&#xff09;Java 中能创建 volatile 数组吗&#xff1f; 能&#xff0c;Java 中可以创建 volatile 类型数组&#xff0c;不过只是一个指向数组的引用&#xff0c;而不是整个数组。我的意思是&#xff0c;如果改变引用指向的数组&#xff0c;将…

java程序员面试常见面试题及答案整理

JAVA相关基础知识   1、面向对象的特征有哪些方面   1.抽象:   抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是…

2020年高级Java程序员面试题汇总,含答案总结

文章目录 JDKDubboZookeeperSpring系列Redis系列Mysql系列Java多线程消息中间件线程池JVM设计模式其他程序设计基础知识算法题面试技术外的问题面试答案引言: 随着金九银十的面试跳槽,回首在经历了两周的跳槽求职路后,终于成功拿到offer,距今已经入职快一个月了,因此,这几…

2018java程序员面试题整理

1.PathVariable注解和RequestParam注解的区别。 RequestParam注解是获取静态URL传入的参数 PathVariable是获取请求路径中的变量作为参数 /需要和RequestMapping("item/{itemId}") 配合使用 2.Param注解和RequestParam注解的区别。 Parm 指定request中必须包含某…

Java程序员不得不会的面试题(含答案)

每个技术人都有个大厂梦&#xff0c;我觉得这很正常&#xff0c;并不是饭后的谈资而是每个技术人的追求。像阿里、腾讯、美团、字节跳动、京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司&#xff0c;如果说能够在这样的公司锻炼几年&#xff0c;相信对自己…

Java程序员面试题集(1-50)

一、Java基础部分 1、面向对象的特征有哪些方面? 答&#xff1a;面向对象的特征主要有以下几个方面&#xff1a; 1)抽象&#xff1a;抽象是将一类对象的共同特征总结出来构造类的过程&#xff0c;包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为&#xff0c…

Java程序员面试题

下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案&#xff0c;原来的题目中有很多重复题目和无价值的题目&#xff0c;还有不少的参考答案也是错误的&#xff0c;修改后的Java面试题集参照了JDK最新版本&#xff0c;去掉了EJB 2.x等无用…

Java程序员不得不会的124道面试题(含答案)

专注于编程、互联网动态。最终将总结的技术、心得、经验&#xff08;数据结构与算法、源码分析等&#xff09;享给大家&#xff0c;这里不只限于技术&#xff01;还有职场心得、生活感悟、以及面经。 点击上方 关注按钮&#xff0c;第一时间送达&#xff01; 多线程、并发及线…