IT第十八天 - 类的封装、继承、重载、上周总结★★★
IT第十八天 |
||
上午 |
封装 |
1.关键字this,是表示该类在实例化时的对象,即this.表示为该对象的属性 2.类的数据保护,set、get方法的写法规则,为了之后的反射机制的读取数据,set方法中对于数据的检测 3.构造方法在封装中的使用,可以避免在实例化时绕开set方法,导致类属性值未赋值,此时可以在类中使用带属性参数的构造方法,覆盖默认构造方法,以强制在实例化时进行赋值,根据得到的参数可以在构造方法中调用set方法进行赋值,类的实例化时只会调用一个匹配的构造方法 |
程序设计:单例模式 |
1.即:当程序被多次运行时,只会产生一个在运行程序,无论用户重复运行多少次,始终都是之前已运行的程序的状态 2.将构造方法的访问修饰符设置为private,并添加一个方法用于获取当前实例,将该实例在该类中进行静态变量的声明,并在添加的静态方法中进行判断null、new、return,这里添加的方法名暂定为:getInstance()为静态方法,即在实例化该类时不需要使用new关键字,直接类名.getInstance()调用 3.对象的比较,==比较的是内存地址 |
|
下午 |
重载 |
1.重载是为了实现方法名的复用 2.方法名可以和类名相同,但是一般我们不这么命名我们写的方法,除了构造方法 |
继承、重写 |
1.Object类是所有类的基类/父类,包括所有的系统类、用户编写的类,例如:当用户编写的类没有编写构造方法时,Java虚拟机会自动为用户编写的类创建一个默认构造方法 2.方法Object.finalize(),和Java垃圾回收机制相关的一个方法,用于在执行真正的垃圾回收前调用的方法,目的是在不可撤销的丢弃对象之前执行清除操作;对于任何给定对象,Java虚拟机最多只调用一次finalize方法 3.方法的重写,建议在方法前加上@Override,以避免在方法编写时出现错误,导致新方法的添加,方法一旦被重写,父类中的相同方法即不存在 |
|
晚上 |
未完成 |
1.重要方法:Object.finalize()方法的学习 2.继承、方法的重写 |
笔记 |
1.关键字this表示的是该类在实例化时的对象 2.类的属性的set、get方法的编写设计,可以在set方法中对赋值操作接收的参数进行检测 3.类的构造方法的编写,猜想可以在构造方法中对类的属性进行默认初始化,听取的建议是可以将构造方法写成带参数的构造方法,这样会强制在对类进行实例化时赋值操作 4.程序设计:单例模式,是为了达到程序被多次运行(猜想:或类被多次实例化)时,都是同一个对象,即static类型对象、程序不允许被同时运行多个客户端 5.继承:Object类是所有类的基类,包括系统类+用户类 6. 重要方法:Object.finalize()方法的学习 7.方法的重写:建议在方法前加上@Override,避免方法的误添加 8.子类最多只能继承父类,但是子类可能拥有多个”父类“,即父类可能继承其他的类,还有如:Object类是所有类的基类 |
|
IT第十四天、十五天、十六天、十七天、上周总结 |
||
图书系统 |
《系统设置》 (1)系统模块划分 1.system:管理员模块、用户模块、系统主界面、公共方法接口、字节控制 2.bean:图书抽象类、单本图书数据类、消息记录类、用户类、动态抓取数据类 3.data:伪数据库类 (2)模块功能设置 1.管理员模块:图书管理(查看图书、新增图书、修改图书、删除图书)、用户管理(查看用户、修改用户会员状态)、申请管理(查看申请、审核申请) 2.用户模块:个人信息查看、热门图书推荐、检索图书、借书/还书/充值、系统设置(SYS)、注销 3.系统主界面:登录、注册、关于系统、退出 4公共方法(暂未完全整理):验证码的生成和校验、用户当前输入的退出、其他 5.字节控制:控制\t的输出数量 6.其他类文件: Book抽象类:包含书名、作者、类别、单价 Books类:包含Book实体、编号、已借阅用户、是否借阅 PopularBooks类:用于在data中动态抓取图书信息 Record类:充值记录审核信息 User类:用户对象类 Data类:虚拟数据库 (3)模块测试、维护 【Question】 1.为什么使用do-while进行功能的逻辑循环,而不是用方法中方法的调用,即类似递归的使用 2.在进行模块的编码时,每完成一个模块的编码,都会对该模块进行模块测试,当测试完全通过后,才会进行下一个模块的编码;当然,可能会再后续模块的编码中会涉及到一些方法的共用,这样可能会导致之前编码、测试通过的模块被修改,基于此种情况的发生,应该在项目编码之前做好模块的设计和可能会编写的方法的复用性 3.在PopularBooks类的编写中,没有添加图书编号的属性,这里借助数组的索引作为某本图书的伪编号,当然,在实际的开发中,应该拉取Data中的编号作为主键进行保存,而不需要保存图书的其他信息 4.对于引用数据类型的使用问题:系统运行前需要初始化一些Data中的运行数据,在对BookS中的借阅用户数组进行初始化时,因为初始化了多本图书,用的是同一个用户数组,导致用户在借阅某一本书的时候,进行该本书的借阅用户写入时,其他图书也被写入了用户,就是因为其他图书也是引用的相同的借阅用户数组 【Extend】 1.用户信息管理页面,添加申请管理员的接口,该申请会被保存到申请记录中 2.在热销图书界面,调用借阅方法,实现借阅的功能【已优化】 3.在检索图书界面,调用借阅方法,实现借阅的功能(这里的借阅暂时不需要限制在搜出的结果内)【已优化】 4.在系统执行操作过程中,定时给用户显示操作状态【以优化】 5.在用户输入需要节约的图书的编号后,如果该编号图书不为空,则给用户显示该本书的信息【已优化】 6.抽出可能会公用/复用的方法,在独立的类中进行编写【已优化】 7.还书功能的实现【已优化】 【Bug】 1.用户已借图书显示错误【已修复】原因:关联图书数据时发生错误,PopularBooks的图书索引设计和Data的图书索引设计存在偏差 2.用户在输入所接图书的编号时,可能会超出实际的索引【已修复】原因:对用户输入的信息进行检索数据前的判断,正确后才会检索数据 3.用户在借阅一本图书时,其他图书的借阅用户被重写【已修复】原因:引用数据类型的使用错误 4.在进行ALL删除图书时,出现了删除图书错误:误删或未删除【已修复】原因:在执行ALL删除操作前,先在Data中取出了所有可能被删除的图书索引,而在进行删除操作时,每删除一本图书后,都会对book数据进行重新调整,导致图书索引发生变化,因此发生错误,【这是由于系统在初期设计时发生的设计缺陷】,暂时弥补是,先进行排序,每进行一次删除操作时,对已取出的索引数组进行-1操作 (四)总结 在进行项目的编码前,应该尽可能的进行程序的设计,分析需要实现的功能,而得到可能会用到什么样功能的方法,并进行总结、归纳,实现代码复用性的最大化;在进行程序的设计时还应该考虑到部分逻辑的设计,逻辑的设计在即要避免过度编码技巧的同时、也应该做到程序实现的缺陷避免(最好是可以讨论下或可以找个同僚说说自己的想法、交换交换意见);模块测试的应用,模块测试应该是最近来说需要经常使用的测试方法,在每次完成一个模块的编写后,都应该进行该模块的测试,在测试完全通过后,再进行下个模块的编写;调试程序时,先想想逻辑上是否可能会有什么缺陷,然后进行debug的调试,快速定位到错误的根源;程序的逻辑跳转设计时,可以避免【递归式】的调用,尽量避免,因为编程的技巧在实际的开发中可能不是那么的重要,而且递归式的调用方法,感觉上比较的“嵌套”,本来应该回到上级菜单进行跳转的地方,却在当前方法中调用跳转方法,程序过于的混乱;持续整理中…… (五)知识总结 1.关键字static在声明变量时的使用,不需要实例化该类,即可通过类名.变量名使用该变量,但是这样会非常开销内存 2.对于引用数据类型的使用,没有关系的两个变量应该尽量的避开使用像的引用进行赋值 3.方法equals()不能接受null参数/前缀不能为null,因此可以在使用前对其判断if == null 4.关于管理员权限的问题,即使是超级管理员也不应该能查看用户的比较私密的信息,如:密码;而对于普通管理员的权限,也不应该可以修改其他的普通管理员,即管理员的权限只能向下,不能持平或向上 5.对于double类型的数据进行输出格式化时,可以使用DecimalFormat对其进行格式化【暂未实践】 6.对程序中,在显示信息时,可能会关联其他的显示,而这些显示量可能会比较大,因此可以对这部分关联的信息,进行单独的显示 7.对于本程序的一个设计缺陷/不合理之处,是在进行图书的批量删除时,不应该先全部取出源数据的索引,再进行逐条的删除操作,而应该独立的写成删除方法,进行调用,这样不仅减少了代码行,也更符合程序的设计逻辑 |