【总结】常见的开发中错误
2015-10-28 17:02
393 查看
项目马上要完成了,在开发中遇到了很多问题,包括以前的问题,这里进行一个小的总结吧,学习交流用,如果有不正确的地方多多指出,你知道了也让我知道吧,哈哈,这里因为错误很多,只总结小部分。
1.String字符串值比较与字符串地址比较混淆== 在字符串比较中为地址比较
.equals()方法为字符串值比较
public class StringDemo { public static void main(String[] args) { String string1 = "123"; String string2 = "123"; String string3 = new String("123"); //----------------==--------------------- System.out.println(string1 == string2); System.out.println(string2 == string3); System.out.println(string1 == string3); //----------------equals--------------------- System.out.println(string1.equals(string2)); System.out.println(string2.equals(string3)); System.out.println(string1.equals(string3)); } }
运行结果:
true
false
false
true
true
true
之所以
System.out.println(string1 == string2);
System.out.println(string2 == string3);
System.out.println(string1 == string3);
是 t f f 这个结果是因为Java的String常量池,因为string1和string2 是一般的赋值过程,所以当string1和string2比较地址时候,Java会在常量池中寻找存储相同值的内存地址,同时string1和string2同时指向这个地址,所以是true ,string3虽然值相同,但是使用new声明的时候,内存中指向的不是string1,string2的地址,因为使用new关键字会在堆中开辟一个空间来存放,所以后面的都是 false false
2.使用SharedPerference来存储的注意点
虽然使用sp来存储很方便,但是如果不注意的话,可能会使用sp存储大量数据,比如状态字段值,id值,字符串等等,如果少量使用的话或是使用合理的话,这样弊端还不是很明显,但是如果大量使用sp的话,那么弊端就显现出来了,以为sp是使用xml来存储数据的,所以在解析文件的时候也是一个IO操作,需要去读取文件解析节点等操作,这样会很消耗内存,使程序运行不流畅,所以建议是能用常量存储的就用常量存储,以减少内存的消耗。
3.IO流中的错误关闭或不标准关闭导致问题
先来看一段代码吧:
<span style="font-size:18px;">import java.io.BufferedOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class FileDemo { public static void main(String[] args) { FileOutputStream fos = null; BufferedOutputStream bos = null; byte[] b = new byte[1024]; try { fos = new FileOutputStream("1.txt"); bos = new BufferedOutputStream(fos); bos.write(b, 0, b.length); bos.close(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }</span>
很简单的IO操作的一小段代码,但是这个存在一些隐患,在IO流使用以后需要关闭,关闭的时候有时候为了简便所以直接在try-catch块中直接关闭,这时候就会存在隐患,当在关流之前的操作出现错误时候,这时候关闭的方法就不会再执行,所以这个关闭方法不是万全之策,所以需要改成这样,这样就保证了关闭的目的:
<span style="font-size:18px;">import java.io.BufferedOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class FileDemo { public static void main(String[] args) { FileOutputStream fos = null; BufferedOutputStream bos = null; byte[] b = new byte[1024]; try { fos = new FileOutputStream("1.txt"); bos = new BufferedOutputStream(fos); bos.write(b, 0, b.length); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (bos != null) { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } }</span>
4.使用第三方库时候需要注意点
1.使用第三方库的时候,首先需要注意有些第三方库或者框架在使用的时候需要你的签名,当使用SHA1签名的时候需要注意,在你未为你的APP打包发布的时候(即未签名打包状态),SHA1值与签名后的SHA1值有可能不一样,所以需要注意下,比如在使用百度地图API的时候,就有这个问题(不知道你们有没有这个问题,但是需要注意下)。
2.当时用库文件的时候,有可能出现:明明导入到eclipse(我用的eclipse,所以以eclipse为准)中,然后正确导入库的时候,工程文件还是有问题,经检查后是库文件没有导入,导入框(properties of 你的项目 ---- Android路径)中显示导入的库是红叉,这个问题是由于你的库文件,和你的工程文件不在同一个路径下,所以才会出现这种问题,解决方法就是将库文件与工程文件放在同一个文件中,这样就能解决了。
3.有些开发者想引用库文件的jar包,这样比较方便,但是有些库文件需要注意,有时候可能做成jar包的时候,引入以后可能代码不会报错,但是库文件的jar包中有可能少些东西,在运行程序的时候就会发现,是那个库文件有问题。
5.为app打包时候出现下面的对话框
这是因为app打包的时候会检查你程序中的警告等等,所以会限制下,解决办法上面写的很清楚了,右击项目properties---Android Lint Preferences--Configure....----Run full error check...
将Run full 勾选掉就ok了
好了就说那么多吧,以后还会再次总结的。
相关文章推荐
- HTTP地址的规范
- linux 内存分配机制
- Java FileFilter 文件过滤
- Clustering by density peaks and distance
- 性能测试过程中前端某图片显示异常问题及解决思路
- SQL 语句中union all和order by同时使用
- JSP实现从数据库导出数据到Excel下载的方法
- Xcode 7真机免证书调试
- Linux下使用find查找文件内容,跳过所有目录名成和指定子目录的方法
- CentOS6.5下网络启动服务器安装和配置方法(pxe+tftp+dhcpd+kickstart)
- 1010. 一元多项式求导 (25)
- 计算机cpu、寄存器、内存区别
- 指针函数与函数指针的区别
- C#解决动态添加控件时,控件闪烁的问题
- 判断是手机还是固话,判断两个号码是否为同一地区的号码,支持手机和固话同时判断
- 【转】mysql查看日志位置和开启日志
- ThinkPad无法安装系统的解决办法
- 在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求
- C#解析Cookie字符串为CookieCollection
- mysql in 子查询 效率慢 优化