java开发手册pdf,JAVA手册

Ava开发手册规格总结

蚂蚁最近发布了《阿里巴巴Java开发手册》正式版。 安装idea的代码监视插件后,本人打算逐条阅读开发规范的内容,并做了以下笔记。 大部分内容可能是在文档内容中添加了自己的理解。 用于在未来的开发中纠正自己的代码习惯,提高自己的代码质量。

不要强制将ArrayList的subList结果转换为ArrayList

做强的事会抛出异常

使用列表列表2=新阵列列表(列表. sublist (0,1 ) );

subList返回在ArrayList中定义的subList,而不是ArrayList

不推荐iBATIS拥有的queryforlist (字符串语句名称、int start、int size )

使用自己设计的页面查询

长整型或长整型初始赋值使用大写字母l而不是小写字母l。 小写字母容易与数字1混淆,容易引起误解。

龙格l=0l; //Long l=0l;

如果Map/Set密钥是自定义对象,则必须重写hashCode和equals。

插入Map和Set时,用key的hashCode和equals判断插入对象是否已经存在于Map或Set中。

重写hashCode和equals后,可以排除在Map或Set中插入具有相同属性的不同对象。

因为Object的equals方法容易抛出指针异常,所以必须使用具有常量或值的对象调用equals。

String inner=’hi ‘;

if(inner.equals(str ) ) (/str.equals (inner ) ) ) )。

系统. out.println (hello world );

}

如果str的书写方式为null,类似于评论中的内容,则会抛出NullPointerException

OJO类中的布尔型变量不应带有is。 否则,某些框架的分析会导致序列化错误

因为没有给出具体的框架,所以在这里分析POJO的概念

可以将po :持久性对象视为映射到数据库中的表的java对象。 最简单的PO对应于数据库中某个表的一条记录,多个记录可以使用PO集合。 PO应该不包含对数据库的操作。

VO :值对象值对象。 通常用于业务层间的数据传输,与PO一样只包含数据。 但是,应该是抽象出的业务对象,可以表示对应,也可以不对应。

Dao :数据访问对象数据访问对象。 此对象用于访问数据库。 通常与PO结合使用,但DAO包含各种数据库操作方法。 通过这种方式,与PO一起执行与数据库相关的操作。

通过调用BO:business object业务对象、封装业务逻辑的java对象和DAO方法,与PO、VO协同进行业务操作。

POJO : plainordinaryjavaobject简单无规则的java对象,即通常用于存储数据的java类。

POJO类必须写toString方法

重写toString可以在程序出现问题时打印对象的属性值,从而快速识别问题

请注意,如果继承了另一个POJO类,则在前面添加super.toString。

简单数据格式是线程不安全的类,通常不应将其定义为静态变量。 如果定义为静态,则必须将其锁定或使用DateUtils工具类。

说明:对于JDK8APP应用程序,可以使用instant代替Date,使用LocalDateTime代替Calendar,使用DateTimeFormatter代替简单数据格式。 官方说明: simplebeautifulstrongimmmung

魔法值,即未定义的常量,不能直接显示在代码中

暂时不知道理由,可能是因为代码的可读性。

知道理由的人请告诉我

不能使用过时的类或方法。

java.net.URLDecoder的方法decode(String encodestr )已过时,必须使用双参数decode (string source,stringencode )。

既然接口提供方明显是老式接口,就有义务同时提供新接口; 作为呼叫方,有义务考证新实现老式方法是什么。

旧类或方法在未来的环境中可能令人担忧,例如时间戳超时32位int所能表示的最大值。

不能在finally块中使用返回。 返回finally块的return后,方法将结束执行,try块的return语句将不再执行。

finally块中的代码无论如何都会执行。 如果finally中有return语句,则函数的返回值必须是finally块中的return语句。 因此,不执行try块中的return语句。

不要在foreach循环中执行元素的remove/add操作,remov

e元素请使用Iterator方式

在foreach循环中通过遍历集合类中的元素去循环执行,如果这个时候使用remove或者add操作,改变了集合类中的元素,所以会抛出异常

使用Iterator方式去循环集合类时,通过迭代器,调用next获取下一节点的数据是线程安全的、

中括号是数组类型的一部分,数组定义如下:String[] args

定义数组的规范

事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。

抛出异常被catch后方法将不抛出异常,所以就不会进行事务的回滚,所以需要回滚的情况下要手动回滚

使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常。

刚看到的时候想不通为什么都已经转成List为什么不能调用add等方法。

后来阅读了Arrays.asList()的源码后发现返回的是一个自己定义的ArrayList(不知道为什么也叫ArrayList),继承了AbstractList,但是没有重写add方法。所以抛出了异常。

使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的是类型完全一样的数组,大小就是list.size()

toArray有两个重载方法toArray()和toArray(T[] array)。

toArray()返回的是Object[],不能强转成想要的数据类型,要转化的话需要遍历去转化。

toArray(T[] array)会返回和入参一样类型的数组,所以用这种方法更加合适。

关于基本数据类型与包装数据类型的使用标准如下:

1) 所有的POJO类属性必须使用包装数据类型。

2) RPC方法的返回值和参数必须使用包装数据类型。

3) 所有的局部变量推荐使用基本数据类型。

包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址,基本类型不是

包装类型是引用的传递,基本类型是值的传递

声明方式不同,基本数据类型不需要new关键字,而包装类型需要new在堆内存中进行new来分配内存空间

存储位置不同,基本数据类型直接将值保存在值栈中,而包装类型是把对象放在堆中,然后通过对象的引用来调用他们

初始值不同,eg: int的初始值为 0 、 boolean的初始值为false 而包装类型的初始值为null

使用方式不同,基本数据类型直接赋值使用就好 ,而包装类型是在集合如 coolection Map时会使用

包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式

一个自然语义的英语单词增强代码的可读性

包名统一使用小写区分首字母大写的类名

及时清理不再使用的代码段或配置信息。

减少代码的冗余量

增强代码可读性

后台输送给页面的变量必须加感叹号,${var}——中间加感叹号!。

加感叹号防止变量为空时打印变量名,加感叹号后如果变量为空则不显示

在if/else/for/while/do语句中必须使用大括号,即使只有一行代码

增强代码可读性

在subList场景中,高度注意对原列表的修改,会导致子列表的遍历、增加、删除均产生ConcurrentModificationException异常。

subList返回的是ArrayList中定义的SubList,而不是ArrayList

对原列表的修改时,由于子列表不会改变,会造成异常。

文本内容属于本人学习过程中的笔记记录,如有错误欢迎指出。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注