纠正编码错误篇 (3)Cursor、Exception 常见警告及解决办法

前言#

这一篇接着讲讲一些比较有意思的黄色警告(Warning),仔细的想了一下,也就想起来了cursor,Exception是最近才遇到的,所以也顺便说一下。

对于系统的一般的警告提示,比如,局部变量不要赋值啊 ,if条件恒等啊,方法已经过时之类的,这里就不说了。

正文#

<h2>Cursor</h2>

Cursor是光标的意思,主要就是应用在数据库中,我们去查询一条或多条记录,会返回查询结果的光标,通过对这个光标进行循环,得到所有的查询结果。

我遇到的Cursor主要有两个非常重要的警告(Warning):

1、可能出现空指针异常的警告

Method invocation 'moveToNext' may produce 'java.lang.NullPointerException' less...
This inspection analyzes method control and data flow to report possible conditions that are always true or false, expressions whose value is statically proven to be constant, and situations that can lead to nullability contract violations.
Variables, method parameters and return values marked as @Nullable or @NotNull are treated as nullable (or not-null, respectively) and used during the analysis to check nullability contracts, e.g. report NullPointerException (NPE) errors that might be produced.

好长的英文,虽然我能看懂,但是组织语言就有点费劲了,大概的意思就是在某些情况下,返回的Cursor可能是空的,建议我们用一些 @Nullable 或者 @NotNull 注解来检查是否可以为空,也就是这里可能为空,你看着办吧。

当时我们不能这么任性,都空指针了肯定是要崩溃的,为了增强程序的健壮性,在外层加上if(cursor != null) 就OK了。

2、Cursor没有被回收

This Cursor should be freed up after use with #close() less... (⌘F1)
Many resources, such as TypedArrays, VelocityTrackers, etc., should be recycled (with a recycle() call) after use. This lint check looks for missing recycle() calls

大概意思就是,这个Curor应该在使用之后调用close()方法释放自己。许多资源,比如TypeArrays,VelocityTrackers 等等,他们使用结束了之后了需要调用recycle()来回收和释放。

当我们一开始接触Cursor和数据库的时候,都听过看过无数次Cursor必须要close(),再犯这个错误就有点尴尬了,如果是try-catch中,建议把Cursor的回收放在finally中。

例如:

        Cursor cursor = null;
        try {
            StringBuilder sql = new StringBuilder("select * from Student");
            cursor = SqlUtil.getInstance().rawQuery(sql.toString(), null);
            if (cursor != null) {
                while (cursor.moveToNext()) {
                ...
                }
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            if (cursor != null) {
                cursor.close();
            }
        }

<h2>Exception</h2>

Exception就是异常,也是我们最不愿意看到的东西,因为他的存在,不得不做很多意外的处理,否则程序就会变得不稳定。

我遇到的情况,不能算是一个问题,仅仅是一种建议,但是我觉得很有意义,所以贴了出来:

catch' branch identical to 'InstantiationException | IllegalAccessException' branch less... (⌘F1)
Reports identical catch sections in try blocks under JDK 7. A quickfix is available to collapse the sections into a multi-catch section.
This inspection only reports if the project or module is configured to use a language level of 7.0 or higher.

上面的警告大概意思是:在 try的代码块中,相同的catch块结构在JDK 7 以下比把这些块进行折叠到一个(<b>多catch块</b>)中要更有效。这个检查只在project或者module被配置使用JDK 7 或者更高的时候报告。

上面的 <b>多catch块</b> 被我加粗了,括号是为了方便断句。直接看我的截图,所有的东西就都明白了:

之前的catch语句


这里写图片描述

修改完的catch 语句:

这里写图片描述

一目了然,就是通过 “|” 运算符号折叠成一个判断语句,这个符号有"或"的意思,我觉得在这里理解非常合适。

应该是java意识到了catch语句的臃肿,所以在JDK中开始建议这种模式来捕获异常,相信将来,java其他方面也会越来越简化。

总结#

从这些小小的警告中,我可以感受到编辑器默默无闻的为我们做了很多的事情,这也是为什么换了编辑器,很多人都会突然懵逼,所以看到这些提示,我们应该把正确的编码格式变为自己的习惯,把之前自己的陋习和缺点慢慢改正,而不是视而不见,一下带过。

暂时想不起来还有什么比较有意思的警告,如果有我再补上,如果有问题或者我说的有问题的地方欢迎留言指正。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容