java goodcoder的一些反思!编码思维杂谈

正好洗完澡,有空就把这个坑填了。

说道百度的编码规范,确实能从严谨性锻炼人的思维。

先谈一下背景吧。百度有一个代码规范考试,需要你提交一份符合考试要求的代码,之后会有两审去给你提出意见。

 

这次我通过的java,从这次考试分如下几点谈一谈:

一。代码的质量:线程安全,同步问题,异常处理,设计模式一类一类的

 

以下还是用我自己代码来说明吧!

单例模式:

举个例子:

这个地方是要实现单例,让整个系统中只存在一个MessageCenter,从下图可以看到我创建一个私用成员变量messageCenter,

同时实现了一个私有的构造函数,保证调用MessageCenter类只能使用getInstance()去创建(唯一入口)

然后回到第一张图,评审人提出来的问题是:同步问题。其实这个一开始我很困惑,我已经加了synchronized

去进行同步。(这里可以这样理解,就从我目前的能力来看)句子内加了synchronized(class)代表了在这个class

里面获取了一个互斥锁mutex,之后整个代码块{}结束了之后释放互斥锁。

假如学过python的话可以这样理解:

 

with threading.Lock():

  something todo

 

回到问题,我已经构建了添加单例的代码块为synchronized,那为何还有同步问题?

其实查询了一下单例模式的例子,不难发现其实我还是少了一个null的判断,代码如下:

在synchronized代码块里面还有一个判断messageCenter为空?这是为何?

这个具体的描述还是看看单例模式的那篇文章吧,双重null判断的含义不同,前者是为了让已存在了单例后不需要去在

创建浪费很多时间,后者则是避免在A进程执行sychronized模块(创建MessageCenter对象的时候),又有一个进程B请求了

互斥锁,虽然没进去在外面等待,但是等A执行完毕释放了互斥锁,B之后的步奏就是做和A一样的事情,在创建一次。结果:单例失败!

 

 

谈一下对自定义异常 

首先为什么要自定义异常?

主要原因是Java提供的异常类在还是不能很好的阐述异常发生的原因(虽然内置的异常类型已经够多了)

从我下面的这个截图来阐述吧!首先我声明了一个自定义异常 MessageNotFindHandlerException 

从名字就能很清楚的了解,消息找不到处理器(这句话其实可以说从业务的这个纬度去表诉的,那是不是也可以理解为自定义异常

可以很好的描述业务逻辑的异常,使程序可读性更强也更有健壮性)

我这个异常继承了一个RuntimeException(运行时异常导致运行不了)

从评审的角度来看,缺少包装异常,那什么是包装异常?

其实我弄了很久都没弄明白,后面找评审人,评审人只打开了Exception类的实现,我就大概了解该去改什么了!

很明显我们能看到对于Exception 起码存在三个构造函数 Exception() Exception(String message) Exception(String message, Throwable cause)

 

转载于:https://www.cnblogs.com/hexie/p/4911108.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值