FindBugs 规则整理:Style & Dodgy
DLS_DEAD_LOCAL_STORE
翻译Dead store to .. in …This instruction assigns a value to a local variable, but the value is not read or used in any subsequent instruction. Often, this indicates an error, because the value computed is never used.Note that Sun’s javac compiler often generates dead stores for final local variables. Because FindBugs is a bytecode-based tool, there is no easy way to eliminate these false positives.某个局部变量没有被应用过,这通常存在问题,但是javac编译器在编译局部变量时,也会产生dead stores,从而倒是FindBugs误报。
原因同翻译
解 ...
FindBugs 规则整理:Bad Practice
NM_SAME_SIMPLE_NAME_AS_SUPERCLASS
翻译The class name … shadows the simple name of the superclass …This class has a simple name that is identical to that of its superclass, except that its superclass is in a different package (e.g.,alpha.Fooextendsbeta.Foo). This can be exceptionally confusing, create lots of situations in which you have to look at import statements to resolve references and creates many opportunities to accidently define methods that do not override methods in their superclasses.某 ...
FindBugs 规则整理:CORRECTNESS
UWF_NULL_FIELD
翻译Field only ever set to null: …All writes to this field are of the constant value null, and thus all reads of the field will return null. Check for errors, or remove it if it is useless.某个域的值一直都为null,导致所有读取到的该域的值也都是null,检查该域是否存在异常,或者移除这个无用的域
原因在某个类里面我们定义了一个私有的成员变量,但是这个成员变量在实例范围内没有得到任何的初始化(采用默认的构造方法),始终为null,所以在实例范围内使用该成员变量时,如果不先对其进行初始化操作或者无意识的行为忘了初始化操作,那肯定是要报空指针异常
解决方案对该变量进行正确的赋值或者移除
RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
翻译Nullcheck of form at line .. of value previousl ...
FindBugs:简介与使用
前言FindBugs是一个帮助项目发现Bug的静态分析工具,因为FindBugs分析报告都为英文,而且只有这个问题的描述,所以接下来将会通过多篇文章以Bad Practice、Correctness、Style等FindBugs错误类型为分类进行整理,每篇文章会对每个出现的问题尽量按照以下的方式给出详细的说明
问题描述的翻译
为什么会产生这个问题
怎么解决这个问题
由于个人遇到的错误类型有限,所以该系列文章会整合项目中遇到的和网上找到的问题,有遗漏的或者错误的地方也会持续补充和修改,想要查找具体问题的同学可以到相对应的文章里面按照Bug名称进行搜索。
简介Findbugs是一个静态分析工具,它检查类或者JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。Findbugs自带检测器,其中有60余种Bad practice,80余种Correctness,1种 Internationalization,12种Malicious code vulnerability,27种Multithreaded correctness,23种Performance,43种Dodgy。我 ...
Java 内部类浅析
内部类内部类是指在一个外部类的内部再定义一个类,是一个编译时的概念,一旦编译成功,内部类与其外部类就会成为完全不同的两类,只是内部类的前面会冠以外部类的类名和$符号,如一个outer类内部定义了一个inner的内部类,那么编译完成后会生成outer.class和outer$inner.class两个类,因此内部类的成员变量与方法可以与外部类相同。从内部类的定义上来看,其实内部类严重破坏了良好的代码结构,那么为什么还要使用内部类呢?因为内部类可以随意使用外部类的成员变量(包括私有的)而不用生成外部类对象,这也是内部类的唯一优点。
内部类的分类及示例内部类分为成员内部类、局部内部类、静态内部类和匿名内部类。下面针对各个内部类进行介绍:
成员内部类作为外部类的一个成员存在,与外部类的属性、方法并列。成员内部类中可以访问外部类的所有成员,当外部类的变量与内部类的变量名重复时,使用外部类名.this.变量名可以对外部类的变量进行调用,如果没有重复时可直接使用变量名进行调用。在普通外部类方法中访问静态内部类可new出成员内部类对象进而直接调用其中的方法,而在静态外部类方法中需要先new出外部类对象 ...
计算机专业术语整理
由于经常会看到一些缩写或者专业名词,现在开始有记录下来的习惯,记录下来的今后就都放在这个博文里,顺带会补上各自的含义便于查找。
用户界面User Interface UIUI设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。
用户体验User Experience UX人与系统交互时的感觉就是用户体验。
人机交互Human Computer Interaction HCI是指人与计算机之间使用某种对话语言,以一定的交互方式,为完成确定任务的人与计算机之间的信息交换过程。
软件即服务Software-as-a-Service SaaS用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,软件厂商在向客户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让用户随时随地都可以使用其定购的软件和服务。
基础设置即服务Infrastructure-as-a-Service IaaS消费者通过Internet 可以从完善的计算机基础设施获得服务。这类服务称为基础设施即服务。
平台即服务Platf ...
小米手机锁屏适配性总结
关闭系统锁屏
关闭当前锁屏,跳转至如下界面让用户设置startActivityForResult(new Intent("Android.app.action.SET_NEW_PASSWORD"), SET_NO_PASSWORD);
进入开发者选项设置直接进入系统,相应的intent如下Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS设置默认桌面
清除原始小米桌面的默认设置,在小米1/1S手机上可以清除默认设置,而在更高版本清除默认设置的按钮为灰色,需要到设置桌面中由用户手动选择桌面,相应的intent如下Settings.ACTION_DISPLAY_SETTINGS
《Android 4高级编程》学习摘要
文件(如位图或者音频文件)通常是不存储在数据库的表中的。使用一个代表存储路径的字符串或者更好的方式是使用一个完全限定的URI来存储文件的路径。 强烈建议所有的表都应该包含一个自动增加的键字段,作为每一行的唯一索引字段。如果计划使用ContentProvider来共享表,就必须具有唯一的ID字段。
当你认为要查找的列在所有情况下都存在时,使用getColumnIndexOrThrow是一种很好的做法,当列在一些情况下不存在时,使用getColumnIndex并检查结果是否为-1是比捕获异常更加高效的方法。
数据库实现应该发布一些提供了列名称的静态常量,这些静态常量通常在数据库的合同类或者Content Provider内公开
技术使用结果Cursor后关闭它非常重要,这样可以防止内存泄露,并降低应用程序的资源负载。
数据库操作的insert方法的第二个参数为null列侵入(null column hack),如果想在一个SQLite数据库中添加一个空行,在传入一个空的ContentValues对象的同时,还必须传入一个值可以显示设置为null的列的名称。一般来说,确保代码不会尝试在一个 ...
Android 学习历程摘要之三
记录下Android学习与实践过程中遇到的问题和学习要点,可能有些地方可能理解不对,如果有朋友看到的话麻烦指正我一下,万分感谢
速率判断类Velocity类,当要获取速度之前需要先调用computeCurrentVelocity方法来计算
多线程:可以继承Thread类内部放置一个变量来作为每个线程自身的开关,避免使用全局变量,不好控制每个线程
设置LayoutParams时需要设置该View的父布局下的LayoutParams,否则会出现类型转换异常
Toolbar中的minHeight设置后等于其menu的高度,单纯设置Height不会影响menu的高度
TextView拦截事件clickable和longClickable都为false可解除
使用ImageView控件时如果需要图片与字一样大,可以使用background来设置图片,同时使用layout_alignBottom以及layout_alignTop与字对齐则会自动拉伸
读取文件如果是字符文件,可以通过FileReader类,如果是二进制数据文件,可以通过FileInputStream类
存储在应用目录下的私有数据文 ...
Android 学习历程摘要之二
记录下Android学习与实践过程中遇到的问题和学习要点,可能有些地方可能理解不对,如果有朋友看到的话麻烦指正我一下,万分感谢
proguard混淆:对与Activity等不应进行混淆,否则系统将找不到生命周期函数;JSON字符串要考虑混淆之后是否会影响字段名;native方法也不混淆,否则调用不到
ListView的onItemLongClickListener返回true时将不会再调用onItemClick
善用单例模式
分享会上所得:重要与紧急哪个优先处理,答案是优先处理重要的事情。处理事情的顺序应该是:重要又紧急,重要不紧急,紧急不重要,不紧急不重要。首先重要的事情一般都是正确的事情,而紧急去做的事情却不一定是正确的,其次重要有紧急的事情占的比例最小,不紧急不重要的事情最多,而如果我们选择先去处理紧急不重要的事情的话,那么之前重要不紧急的事情将会因为重要而变得紧急,那么我们就会陷入一个持续处理重要又紧急事件的循环中,这是一种非常不利的工作状态。
使用番茄来进行自我计划与训练
工程右键——Properties——Android,作为Library的项目要勾上is Library ...