学习目标
1.重点:掌握pivate、public关键字的用途及其与setter/getter模式和封装性之间的关系。
2.理解static属性与static方法的用途。
3.掌握使用初始化块初始类的方法。掌握初始化块与静态初始化块的区别。
4.掌握使用我package管理类。
5.重点:学会识别问题中的类并定义解决问题所需要的类。
6.初步了解Java编程规范。
学习任务
观看
1.Java线上课程
http://www.xueyinonline.com/detail/218804544
2.视频:3.3-3.7.
重点观看:3.3、3.4、3.7(面向对象-类的设计).
重点:结合视频与预习课件以博客或者帖子的形式完成如下"问题列表",需提交。本次作业基础分1分,最高3分。
3.尝试完成PTA题集:
编程题:3.1 构造方法与toString,3.2 构造方法与初始化块,3.3 形状。提前完成这3题的同学,实验课上检查后加分。
程序填空题:b3.1
4.阅读:阿里巴巴Java开发手册 终极版(1.3.0)》中的1.1-1.4.
问题列表
1.什么样的方法应该用static修饰?不用static修饰的方法往往具有什么特性?Student的getName应该用static修饰吗?
当多个对象之间共用某种属性,该属性即可用static进行修饰。而static修饰的方法不需要建立新对象即可直接调用。
static修饰的方法只能访问静态属性,并且可直接被调用。不用static修饰的方法往往是对非静态属性的操作。
不可以,Student的name往往是非静态属性与对象绑定,static无法访问返回。
2.购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?方法与属性到底属于哪个类,要怎么判定呢?
将一系列动作分解为名词和动词,动词对应方法,名词对应类或者属性。
将某些动作的操作内容相近的动作可作为一个类,该动作伴随的名词可归到同一类中。
例如:购买东西的过程,要将商品加入购物车,之后将所有商品结账。这时,可将加入、结账作为动作加入同一类,所有商品作为另一类,购物车可单独一类。
3.一个项目中有很多类。项目中要怎么管理这些代码呢?
可新建多个包package,将相关的类放在同一包中,进行空间、访问控制管理。
4.阅读《阿里巴巴Java开发手册 终极版(1.3.0)》,写出至少7条Java编程规范。应包含如下几个方面:
变量命名、类命名、方法命名、常量命名、包命名、代码格式、OOP规约
- 变量命名:代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束,使用 lowerCamelCase 风格,必须遵从驼峰形式,首单词小写,后单词大写
正例: localValue / getHttpMessage() / inputUserId - 类命名:名使用 UpperCamelCase风格,必须遵从驼峰形式,全部单词大写。
正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion - 方法命名:使用 lowerCamelCase 风格,必须遵从驼峰形式,首单词小写,后单词大写
正例: localValue / getHttpMessage() / inputUserId - 常量命名:常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
正例:MAX_STOCK_COUNT
反例:MAX_COUNT - 包命名:包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
- 代码格式:
<1>大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果是非空代码块则:
1) 左大括号前不换行。
2) 左大括号后换行。
3) 右大括号前换行。
4) 右大括号后还有 else 等代码则不换行;表示终止的右大括号后必须换行。
<2>if/for/while/switch/do 等保留字与括号之间都必须加空格
<3>方法参数在定义和传入时,多个参数逗号后边必须加空格。
正例:下例中实参的"a",后边必须要有一个空格。
method("a", "b", "c");
<4>单行字符数限制不超过 120 个,超出需要换行。 - OOP规约:
<1>所有的覆写方法,必须加@Override 注解。
<2>相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object。
<3>Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。
正例:"test".equals(object);
反例:object.equals("test");
<4>所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较。