我有礼品你有故事吗 —— Java 开发规约勾起了你什么样的回忆?

两味真火 发布于 2017/02/28 02:32
阅读 3K+
收藏 17

那哥们写的类名首字母居然没大写?

变量名是用下横杠分隔还是驼峰状呢?

ON! HashMap 的并发操作导致死循环了!

维护别人写的恶心代码shi简直有想重构的冲动……

你在 Java 开发时是否遇到过以上的问题?现在这些都不再是问题啦!阿里巴巴发布了阿里巴巴Java开发手册,公开了阿里官方Java代码规范标准,希望能够给业界带来一个标准,促使整体行业代码规范水平得到提高,最终能够帮助企业和开发者提升代码质量和降低代码故障率。

然而,尽管这本高含金量的阿里Java开发手册汇聚了近万名阿里 Java 技术精英的经验总结,并经历了多次大规模一线实战检验及完善,但仍需要更多的程序员参与建设,让其更加完善,因此我们诚邀您在评论区:

1、说说自己因为里面的某些条款踩过的坑,我们将设置 10 个“最悲催同学奖”;

2、针对里面的条款找找茬,说说里面有哪些条款不合适,我们将设置 10 个“最佳评论奖”;

写下你的故事和建议,获奖的同学将有机会获得阿里巴巴送出阿里鸡年公仔一个哦~

程序猿 A:

去年年底刚检视到的代码,以前一直以为是传说,没想到让我碰到真的了。
你见过下面的常量定义么:
int ONE=1;
int TWO=2;
int THREE =3;
......
int TEN=10;

程序猿 B:

作为一个java攻城狮,面对编码规约,我有话要说。公司每次需要我review别人的代码的时候,都有一种隐隐的痛,面对一些无法直视的代码,通常我会细改之,还会多给别人提提建议,以下是我觉得比较重要的几点,需要大家共同遵守的规范。1.只要重写equals方法,就一定要重写hashCode的方法 2.在并发的删除操作中,要对Iterator对象加锁 3.集合初始化时,要对集合初始化大小 4.对资源进行锁时,要保持一致的加锁顺序,避免造成死锁 5.在事务代码中,需要回滚事务,要手动回滚事务 ,还有很多规约需要我们在开发的过程中吸取经验教训,接近业界的标准。

程序猿 C:

强迫症表示最怕的是看别人的代码,有直接用中文变量名的,还有压根没有驼峰的(就和文章没有标点符号一样能不能看懂完全靠猜),心中无数草泥马奔腾有木有!有木有!!其实我觉得不管怎样命名,只要在符合命名规范的前提下,让它看起来酷酷哒就行了对吧。

……

活动时间:活动截止至 2017 年 3 月 12 日 24 点

快来写下那些你在 Java 开发过程中不得不说的故事吧~

扫码或点击此处下载阿里巴巴Java开发手册:

加载中
3
empireghost
empireghost

日期格式化线程不安全,SimpleDateFormat是最常见的坑

p
piz__
回复 @两味真火 : 没注意这个
两味真火
两味真火
回复 @piz__ : 好可惜,您怎么没评论呢
p
piz__
我遇到过,记录下来了~~ https://my.oschina.net/u/2948232/blog/831644
1
substring
substring

1.这坑就太多了,旁边一个哥们提交的代码给你们瞅瞅

        List<Map<String, Object>> mapList = new ArrayList<Map<String, Object>>();
        List<Map<String, Object>> mapList1 = new ArrayList<Map<String, Object>>();
        Integer hiddConred;
        Integer hiddConh;
        Integer hiddConl;
        
        Integer c = 0;
        List<Dept> deptList = deptService.queryDeptByPid(1);

		/* 获取情报分类列表 */
        List<AstDictionaries> listf = astDictionariesService.reclassification();
        for (AstDictionaries astDictionaries : listf) {
            Map<String, Object> map = new HashMap<String, Object>();
            c = c + 1;
            Integer sd = polIntelligenceService.huodefenlei(astDictionaries.getId());
            map.put("a" + c, sd);
            
            mapList1.add(map);
            
        }

2.记得第二年工作的时候经理给过一份类似阿里这样的代码规范,从此之后代码就美观多了

不吃肉夹馍
不吃肉夹馍
也就命名吧 其他真没看出什么来 比较弱
清靜無虞
清靜無虞
回复 @piz__ : 其实在for里面定义变量不是什么大问题,栈空间本身就很快,另外高版本的jvm可能会做优化,你可以自己试一下生成的字节码有什么不同。
清靜無虞
清靜無虞
回复 @piz__ : 说的不是在for里面new对象的问题,是在里面定义变量的问题。Map<String, Object> map这个变量是存储在栈中的,每次循环都会在栈中分配一块内存给map变量。这个可以定义在for外面,这样就只需要在栈中分配一块空间就行了,每次for循环一次,只需要把这个变量的引用指向新new出来的对象就行了。前面有人提到,定义在外面会扩大作用域,这算是缺点。
p
piz__
回复 @清靜無虞 : 这段代码,我看了一下,如果是一个初学者的话,这段代码,最多两个list命名有点问题,你说的c什么的,就只是一个标记,一眼就看出了。如果有几年开发经验的,那么for循环还是可以优化一下的,至少c的变量可以去掉。但是你说的for循环里不能new对象,我这几年没少干过,真不知道有什么问题?
巴林的狗尾草
巴林的狗尾草
回复 @清靜無虞 : 别瞎说,哪个师傅教的不要在for循环里面定义变量的,这叫做区域变量,你搞到外面去,就是作用域污染了,还让JVM回收么?
下一页
1
Nehway
Nehway

java编程从业也有几年了,回想多年前刚开始接触java的时候真是感慨良多呀!

1.了解了定义变量,如String a="i love you",自学了集合类的时候Set<?> x=HashSet<>(),编译错误居然没有发现忘记了"new";

2.非常喜欢用Integer i=128,来刁难别人。

3.心烦的时候思考逻辑真的是一团糟呀一团糟

孤尽
孤尽
代码是与计算机对话,如果烦心,那计算机执行的结果估计也会让你烦哈。。。
1
Liuzh_533
Liuzh_533

前段时间发现新增菜单后显示不出来。。

看代码后发现同事在比较 parentId == id 的时候用的等号,一旦 id 超过128就开始悲剧了。

1
C影
C影

不清楚java的内存结构...

Integer i1=1;

Integer i2=1;

Integer i3=127;

Integer i4=127;

Integer i5=128;

Integer i6=128;

Integer i7=-128;

Integer i8=-128;

i1==i2 返回true  

i3==i4 返回true

i4==i6 返回true

i7==i8 返回true

最后发现 Integer直接赋值在-128—127不会新创建一个对象,超过才会去创建对象

C影
C影
回复 @tym33 : 手误 i5==i6
tym33
tym33
i4==i6返回false
诺言和岁月
诺言和岁月
可以的,长知识了
1
lolcat
lolcat

函数名:thisIsAMethodToRequestBackendData

1
先随便起一个
先随便起一个

我觉得可能来晚了,当我更新到这段代码的时候,心情无比复杂!!

 

两味真火
两味真火
谢谢你能来
0
wongloong
wongloong

神经病吧这个写的?用手机扫描二维码 然后在手机上看Pdf?

诺言和岁月
诺言和岁月
可以电脑点击下载啊
Fatboy123
Fatboy123
应该是公号直接贴过来的文章
0
notreami
notreami
boolean a=true;

boolean b=false;

while(a=b){

....

}

比较偏,就这bug,当年排查了好久。

dxbj1010
dxbj1010
a==b 哈哈 要是写的不规范 好难察觉
孤尽
孤尽
咋一眼还感觉没有问题,:-)
返回顶部
顶部