第三周-自主学习任务-面向对象基础与类的识别

学习目标

  1. 重点:掌握pivate、public关键字的用途及其与setter/getter模式和封装性之间的关系。
  2. 理解static属性与static方法的用途。
  3. 掌握使用初始化块初始类的方法。掌握初始化块与静态初始化块的区别。
  4. 掌握使用我package管理类。
  5. 重点:学会识别问题中的类并定义解决问题所需要的类。
  6. 初步了解Java编程规范。

学习任务

  1. 观看Java线上课程http://www.xueyinonline.com/detail/218804544视频:3.3-3.7.
    重点观看:3.3、3.4、3.7(面向对象-类的设计).
  2. 重点:结合视频与预习课件以博客或者帖子的形式完成如下"问题列表",需提交。本次作业基础分1分,最高3分。
  3. 尝试完成PTA题集:
  • 编程题:3.1 构造方法与toString,3.2 构造方法与初始化块,3.3 形状。提前完成这3题的同学,实验课上检查后加分
  • 程序填空题:b3.1
  1. 阅读:阿里巴巴Java开发手册 终极版(1.3.0)》中的1.1-1.4.

    阿里巴巴Java开发手册终极版v1.3.0.pdf1.01M

问题列表

在类中,用static声明的成员变量为静态成员变量,也成为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效。

一句话描述就是:方便在没有创建对象的情况下进行调用(方法/变量)。

显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。

static可以用来修饰类的成员方法、类的成员变量,另外也可以编写static代码块来优化程序性能.

static方法也成为静态方法,由于静态方法不依赖于任何对象就可以直接访问,因此对于静态方法来说,是没有this的,因为不依附于任何对象,既然都没有对象,就谈不上this了,并且由于此特性,在静态方法中不能访问类的非静态成员变量和非静态方法,因为非静态成员变量和非静态方法都必须依赖于具体的对象才能被调用。

  • 什么样的方法应该用static修饰?

不依赖任何对象就可以直接访问的方法使用static修饰。

  • 不用static修饰的方法往往具有什么特性?

不用static修饰的方法往往需要创建对象实例才能调用该方法。

  • Student的getName应该用static修饰吗?

Student的getName应该用static,因为如果不创建实例,该方法就没有意义。

  • 购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?

首先用一段文字描述将要设计的系统及功能,然后找出其中的名词和动词,名词可以做类名或者属性,动词可以做类的方法。

  • 方法与属性到底属于哪个类,要怎么判定呢?

根据具体类的属性和方法。

  1. 一个项目中有很多类。项目中要怎么管理这些代码呢?
  • 一个项目中有很多类。项目中要怎么管理这些代码呢?

用src文件夹存放原始码文档,classes文件夹存放位码文档,将所撰写的类,再使用package进行包管理。使用包解决实体文档与撰写程序时类名称冲突的问题,再可以使用import节省输入吻合名称时间。

  1. 阅读《阿里巴巴Java开发手册 终极版(1.3.0)》,写出至少7条Java编程规范。应包含如下几个方面:
    变量命名、类命名、方法命名、常量命名、包命名、代码格式、OOP规约。

变量命名

【强制】方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格。
正例: localValue / getHttpMessage() / inputUserld

类命名

【强制】类名使用UpperCamelCase风格,但以下情形例外:DO/ BO / DTO /VO / AO /
PO/UID等。
正例:ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal / TaPromotion反例: forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal / TAPromotion

方法命名

【强制】方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格。
正例: localValue / getHttpMessage() / inputUserld

常量命名

【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
正例:MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
反例:MAX_COUNT/EXPIRED_TIME

包命名

【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
正例∶应用工具类包名为com.alibaba.ei.kunlun.aap.util、类名为MessageUtils (此规则参考spring的框加结椒)

代码格式

  • 【强制】如果是大括号内为空,则简洁地写成{即可,大括号中间无需换行和空格;如果是非
    空代码块则︰
    1)左大括号前不换行。2)左大括号后换行。3 )右大括号前换行。
    4)右大括号后还有else等代码则不换行;表示终止的右大括号后必须换行。
  • 【强制】左小括号和右边相邻字符之间不出现空格﹔右小括号和左边相邻字符之间也不出现空格;而左大括号前需要加空格。详见第5条下方正例提示。
    反例: if(空格a == b空格)
  • 【强制】if/for/while/switch/do等保留字与括号之间都必须加空格。
  • 【强制】任何二目、三目运算符的左右两边都需要加一个空格。
    说明:包括赋值运算符=、逻辑运算符&&、加减乘除符号等。
  • 【强制】采用4个空格缩进,禁止使用Tab字符。
    说明∶如果使用Tab缩进,必须设置1个Tab为4个空格。IDEA 设置Tab为4个空格时,请勿勾选Usetab character;而在Eclipse 中,必须勾选insert spaces for tabs。
//正例:(涉及1-5点)
public static void main(String[] args){
/缩进4个空格
String say = "hello";
//运算符的左右必须有一个空格int flag = 0;
/关键词if与括号之间必须有一个空格,括号内的f与左括号,0与右括号不需要空格if (flag == 0){
System.out println(say);)
//左大括号前加空格且不换行;左大括号后换行if (flag == 1){
System.out.println("world");
//右大括号前换行,右大括号后有else,不用换行} else {
System.out.println("ok");
//在右大括号后直接结束,则必须换行
)
}

...

OOP规约

【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成
本,直接用类名来访问即可。
【强制】所有的覆写方法,必须加@Override注解。
说明:getObject()与getObject()的问题。一个是字母的О,一个是数字的0,加@Override可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。

【强制】object的equals方法容易抛空指针异常应使用常量或确定有值的对象来调用equals。
正例:

"test".equals(object);
反例:

object.equals("test");
说明︰推荐使用JDK7引入的工具类java.util.Objects#equals(Object a, Object b)7.【强制】所有整型包装类对象之间值的比较,全部使用equals方法比较。
说明:对于Integer var = ?在-128至127之间的赋值,Integer对象是在IntegerCache.cache产生,会复用已有对象,这个区间内的Integer值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用equals方法进行判断。

【强制】浮点数之间的等值判断,基本数据类型不能用==来比较,包装数据类型不能用equals
来判断。
说明∶浮点数采用“尾数+阶码”的编码方式,类似于科学计数法的“有效数字+指数”的表示方式。二进制无法精确表示大部分的十进制小数.。

posted @ 2021-09-23 23:53  calizo  阅读(38)  评论(0编辑  收藏  举报