尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Java SE 基础 · 点1 封装
封装学习学习计划Java SE 基础 · 1 封装一、总结1. 实体类封装编写Book实体类将bookId、bookName、bookPrice、bookNum、bookstatus封装到Book实体类。编写Reader实体类将readerId、readerName、borrowedBooks封装到Reader实体类。编写Librarian实体类将staffId、staffName、department封装到Librarian实体类。2. 构造方法构造方法分为有参构造与无参构造无参和有参的方法名一致。有参构造中需要在括号内添加实体类声明的参数例如Book(Integer bookId)可选全量构造与部分参数构造。当实体类参数过多时不推荐全量构建构造主要业务中的参数即可。无参构造用于构造实体类参数默认值括号内不能有任何声明参数通过该构造方法设置参数默认值例如this.bookName unknown。3. setter/getter 方法编写 setter方法为void类型无返回值参数为实体类中对应参数使用this来设置当前实体类对象中对应参数值例如setBookId(Integer bookId) {}内容通常为this.bookId bookId。编写 getter方法为实体类中参数对应的类型直接用return返回参数值例如Integer getBookId() {}内容通常为return bookId。注意boolean类型参数的 setter 方法通常为isXXX而非setXXX。4. 借书逻辑在Main类中先初始化一个Reader实体类对象c创建Book实体类类型的集合再通过add将图书添加到集合通过c.setBorrowedBooks()方法添加到Reader实体类对象封装中的ListBook borrowedBooks。在编写借书方法中通过getBookNum()获取剩余书并记录下来减一后再通过setBookNum()重新设置当前对象中封装的图书剩余数量实现借一本图书的逻辑。在实际过程中应当创建图书馆实体类来封装图书并且借书和还书还需要排除书不存在、书信息为空的情况以及解决并发过程中数据库内数据变化预期结果和实际结果不一致的情况。5. 全量构造方法说明在Reader实体类的全量构造方法中this.borrowedBooks new ArrayList(initialList)里的new ArrayList(initialList)是为了在新建Reader对象时事先写好borrowedBooks内容再通过全量构造自动拷贝到实体类中的borrowedBooks实现新建Reader对象时borrowedBooks就拥有initialList内容。但在编写过程中是在Main类中先新建Reader对象再通过Reader实体类中的 setter 方法来设置borrowedBooks因此并没有体现出该作用。二、代码1. Book.java —— Book 实体类importjava.util.*;//Book实体类publicclassBook{privateIntegerbookId;privateStringbookName;privatedoublebookPrice;privateintbookNum;//剩余图书数privatebooleanbookstatus;//表示是否停卖,true表示 停卖privatestaticfinalRandomrandomnewRandom();//无参应对未知情况未知不可为空publicBook(){this.bookIdrandom.nextInt(1000);this.bookNameBook_Unknown_random.nextInt(1000);this.bookPrice0;this.bookNum0;this.bookstatustrue;}//有参应对新增全量图书不可为空publicBook(IntegerbookId,StringbookName,doublebookPrice,intbookNum,booleanbookstatus){//默认停卖this.bookIdbookId;this.bookNamebookName;this.bookPricebookPrice;this.bookNumbookNum;this.bookstatusbookstatus;}//有参应对新增全量图书(不可为空),并且默认停卖publicBook(IntegerbookId,StringbookName,doublebookPrice,intbookNum){this(bookId,bookName,bookPrice,bookNum,true);//调用全参构造传入默认值 false}//有参构造重载,设置主要参数publicBook(IntegerbookId,StringbookName){this.bookIdbookId;this.bookNamebookName;}//setterpublicvoidsetBookId(IntegerbookId){this.bookIdbookId;}publicvoidsetBookName(StringbookName){this.bookNamebookName;}publicvoidsetBookPrice(doublebookPrice){this.bookPricebookPrice;}publicvoidsetBookNum(intbookNum){this.bookNumbookNum;}publicvoidsetBookstatus(booleanbookstatus){this.bookstatusbookstatus;}//getterpublicIntegergetBookId(){returnbookId;}publicStringgetBookName(){returnbookName;}publicdoublegetBookPrice(){returnbookPrice;}publicintgetBookNum(){returnbookNum;}publicbooleanisBookstatus(){//(布尔类型 通常为is而不是get)returnbookstatus;}OverridepublicStringtoString(){returnBook{bookIdbookId,bookNamebookName,bookPricebookPrice,bookNumbookNum,bookstatusbookstatus};}}2. Reader.java —— Reader 实体类importjava.util.*;//Reader实体类publicclassReader{privateIntegerreaderId;privateStringreaderName;privateListBookborrowedBooks;//无参应对未知情况未知不可为空publicReader(){this.readerNameUnknown;this.borrowedBooksnewArrayList();}//有参应对新增全量读者信息不可为空publicReader(IntegerreaderId,StringreaderName,ListBookinitialList){//初始化列表复制initialListthis.readerIdreaderId;this.readerNamereaderName;this.borrowedBooksnewArrayList(initialList);}//有参构造重载,设置主要参数publicReader(IntegerreaderId,StringreaderName){this.readerIdreaderId;this.readerNamereaderName;this.borrowedBooksnewArrayList();}//setterpublicvoidsetReaderId(IntegerreaderId){this.readerIdreaderId;}publicvoidsetReaderName(StringreaderName){this.readerNamereaderName;}publicvoidsetBorrowedBooks(ListBookborrowedBooks){this.borrowedBooksborrowedBooks;}//getterpublicIntegergetReaderId(){returnreaderId;}publicStringgetReaderName(){returnreaderName;}publicListBookgetBorrowedBooks(){returnborrowedBooks;}//借书publicbooleanborrowBooks(ListBookBorrowBooks,intn){for(Bookbook:BorrowBooks){if(n0)returntrue;if(book.getBookNum()0){book.setBookstatus(false);returntrue;}if(book!null){intcurrentbook.getBookNum();current--;book.setBookNum(current);}n--;}returntrue;}//还书publicbooleanbackBooks(ListBookBorrowBooks){for(Bookbook:BorrowBooks){if(book!null){intcurrentbook.getBookNum();current;book.setBookNum(current);}}returntrue;}OverridepublicStringtoString(){returnReader{readerIdreaderId,readerNamereaderName,borrowedBooksborrowedBooks};}}3. Librarian.java —— Librarian 实体类//Librarian实体类publicclassLibrarian{privateIntegerstaffId;privateStringstaffName;privateStringdepartment;String[]departments{Science,Fiction};//无参应对未知情况未知不可为空publicLibrarian(){this.staffNameUnknown;}//有参应对新增全量读者信息不可为空publicLibrarian(IntegerstaffId,StringstaffName,Stringdepartment){this.staffIdstaffId;this.staffNamestaffName;this.departmentdepartment;}//有参构造重载,设置主要参数publicLibrarian(IntegerstaffId,StringstaffName){this.staffIdstaffId;this.staffNamestaffName;}//setterpublicvoidsetstaffId(IntegerstaffId){this.staffIdstaffId;}publicvoidsetstaffName(StringstaffName){this.staffNamestaffName;}publicvoidsetdepartment(Stringdepartment){//在选择中只能是departments中的元素try{if(department.equals(departments[0])||department.equals(departments[1])){this.departmentdepartment;}else{thrownewIllegalArgumentException(无效的部门名称: department);}}catch(IllegalArgumentExceptione){System.err.println(参数错误: e.getMessage());}}//getterpublicIntegergetstaffId(){returnstaffId;}publicStringgetstaffName(){returnstaffName;}publicStringgetdepartment(){returndepartment;}OverridepublicStringtoString(){returnLibrarian{staffIdstaffId,staffNamestaffName,departmentdepartment};}}4. Main.java —— 测试主类importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){BookanewBook();System.out.println(------无参构造Book,id随机,name随机,停卖------);System.out.println(a.toString());System.out.println();BookbnewBook(29901001,我肯定是第一本书,25.8,100,false);//false表示未停卖System.out.println(------有参构造Book(29901001,\我肯定是第一本书\,25.8,100,false)------);System.out.println(b.toString());System.out.println();b.setBookstatus(true);//将b书停卖System.out.println(------b书停卖了吗状态应为true------);System.out.println(b.toString());System.out.println();ReadercnewReader();//无参构造Reader此时name为unknown其余参数为空System.out.println(------无参构造Reader此时name为unknown其余参数为空------);System.out.println(c.toString());System.out.println();c.setReaderName(我原来有名字);//调用setter为reader重命名对比之前的nameSystem.out.println(------调用setter为reader重命名对比之前的name------);System.out.println(c.toString());System.out.println();ListBookinitialListnewArrayList();//一共图书initialList.add(newBook(1001001,AAA,100.0,501));initialList.add(newBook(1001002,BBB,200.0,601));initialList.add(newBook(1001003,CCC,300.0,701));c.setBorrowedBooks(initialList);//存入图书馆System.out.println(------将initialList中包含的三本图书存入图书馆------);System.out.println(c.toString());System.out.println();c.borrowBooks(initialList,1);//借一本AAA图书System.out.println(------借一本AAA图书num应为500------);System.out.println(c.toString());System.out.println();LibrariandnewLibrarian(20050505,Jack);//有参构造员工id和named.setdepartment(Science);//单独set员工所属部门System.out.println(------有参全量构建员工(20050505,\Jack\),查看department是否为\Science\------);System.out.println(d.toString());System.out.println();}}三、运行结果
RELATED

相关推荐

P1649 Obstacle Course S【洛谷算法习题】

P1649 Obstacle Course S【洛谷算法习题】

P1649 Obstacle Course S 网页链接 P1649 Obstacle Course S 题目描述 有一个 NN(1≤N≤100)N \times N(1 \le N \le 100)NN(1≤N≤100) 的场地,场地由 N2N^2N2 个 111 \times 111 的方格组成。部分方格对于奶牛来说是无法通过的,用 x\texttt xx 标…

📅 2026/9/7 23:52:42
公共字段自动填充

公共字段自动填充

MyBatis‑Plus 公共字段自动填充场景&#xff1a;创建时间、更新时间、创建人、更新人&#xff0c;不用每次 set&#xff0c;MP 自动赋值。核心&#xff1a;TableField(fill FieldFill.xxx) 实现 MetaObjectHandlermaven<dependency><groupId>com.baomidou</g…

📅 2026/10/5 5:00:32
PCBLayout分享---经验之谈(一)

PCBLayout分享---经验之谈(一)

1、PCBlayout基础 1.1、电路图 电路图也叫原理图&#xff0c;是一张图纸&#xff0c;不表达实物尺寸&#xff0c;只描述器件型号、引脚连接关系。 &#xff08;1&#xff09;核心作用&#xff1a;定义元器件、引脚之间电气连通关系&#xff0c;告诉 EDA 软件 “哪些引脚要连在…

📅 2026/9/8 15:43:31
MORE NEWS

更多资讯

📰

深圳电工证官网报名真实经历:别让没证拖了你找工作进度

深圳电工证官网报名真实经历:别让没证拖了你找工作进度 你有没有试过,明明有经验、有技术,但就是找不到工作?原因可能很简单——没有特种作业证。在深圳这样竞争激烈的环境中, 电工证 就是你找工作的“通行证”,而 深圳电工证官网报名…

📰

洛阳涧西区中小施工企业负责人:向公司申请办电工证官方回应及薪资前景全解析

洛阳涧西区中小施工企业负责人:向公司申请办电工证官方回应及薪资前景全解析 刚入职就遇到要办电工证,不办没法上岗,工资也开不了,这种事在洛阳涧西区的中小型施工企业里太常见了。很多人以为只要找公司申请办电工证就能搞定,结果被各种流程、标准和费用…

📰

深圳电工证官网报名怎么操作?上岗必备证书复审全攻略

深圳电工证官网报名怎么操作?上岗必备证书复审全攻略 证书过期了不知道怎么复审延期,你是不是正被这个问题困扰?在深圳做电工, 上岗必备…

📰

特种工证是哪里颁发的值不值得考?证书过期了不知道怎么复审延期?

特种工证是哪里颁发的值不值得考?证书过期了不知道怎么复审延期? 证书过期了不知道怎么复审延期?这事儿真的别拖,尤其是你这种在濮阳中小施工企业干的,现在项目接得越来越多,客户对资质要求越来越严, 特种工证…

📰

考电工证科目五怎么准备才能稳过?考前押题太关键

考电工证科目五怎么准备才能稳过?考前押题太关键 怕考不过白交培训费?你不是一个人。信阳浉河区的应届工程类毕业生小李,去年花了几千元报了电工证培训,结果科目五实操考试直接挂科,至今还在为这事懊恼。如果你也正在备考【考电工证科目五】,那就得把【…

📰

电工证怎么分辨等级官方回应来了,别再交冤枉培训费

电工证怎么分辨等级官方回应来了,别再交冤枉培训费 怕考不过白交培训费?别再被培训机构忽悠了,官方回应明确,电工证等级划分有章可循,搞清楚这些,省下几千块培训费,还能一次通过考试。…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬