尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Java SE 基础 · 点1 封装

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();}}三、运行结果
返回列表