1,大家来讨论一下 由于编码不规范 导致的bug,或者效率低下问题,
共同提高自己的 编程经验!
我先举一个我认为不规范,期待你的表演
if ( list == null){
retrun; }
for(int i = 0; i < list.size(); i++){
//todo some method }
每次都要计算list的size大小,效率低下可以改成 这样
if ( list == null){
retrun; }
int size = list.size();
for(int i = 0; i < size; i++){
//todo some method }
共同提高自己的 编程经验!
我先举一个我认为不规范,期待你的表演
if ( list == null){
retrun; }
for(int i = 0; i < list.size(); i++){
//todo some method }
每次都要计算list的size大小,效率低下可以改成 这样
if ( list == null){
retrun; }
int size = list.size();
for(int i = 0; i < size; i++){
//todo some method }
解决方案 »
- Exception in thread "main" java.lang.NullPointerException怎么解决
- 请问如何把 NetBeans 编写的程序生成一个可以执行的文件
- 一个java正则表达式的问题,懂的请进
- SOCKET问题
- (在线等待)一个很怪的JAVA连接数据库问题
- 高手请进-请教gc问题
- 大家过来看一下,Sun公司也解决不了的数据库连接池,连接泄露问题
- <-----------我的TextArea怎么不可见?高手帮忙啊----------->
- java的初学者,有志同道合愿携手同行者加我呀
- JAVA中表格 JTABLE问题
- 好久没来提问了,今天提问个多线程编程的问题 高手新手一起板砖鸡蛋砸过来
- 正则表达式的问题
for(int i = 0; i < size; i++){=>
for(int i = 0,size= list.size(); i < size; i++){
你size没定义
do something...
else if
else每次都要判断 效率比较低。
建议使用:swtich()
case .....
do something...
case
do something...
-----------虽然我很久没写 java 代码,但你不要欺骗我~ C 语系的应该都支持该写法
但是 是不规范 的你要定义 请这样 int i;
int size;
不要 int i ,size,这样就是不规范的请大家也可以也可以写出 你 不规范的,地方
代码是如何不规范,如何难看的
比如 有的人 取一个用户注册的页面,就叫 yhzc.jsp
我也写个
传参username,pasword
错误写法:if(password==null || password.equals("")){
return "密码空"
}
if( username.equals("")|| username==null){
return "登录名空"
}正确写法和讲解:
if( username.equals("")|| username==null){
return "登录名空"
}
这一句顺序写错了,应该先判断是否为NULL。操作符是短路的,可能发生异常,当username为Null时异常
写成
if( "".equals(username){
return "登录名空"
}另外从业务上来说,第一句也错改为:
if(password==null || password.trim().equals("")){
return "密码空"
}
所以问题不能仅仅从代码的角度看,还应该从编译期、运行期看
建议常量放前面,“”,null都应放前头,不会产生空指针。
Query query = em.createNativeQuery("select * from t_user where username= ? and password= ? ")
.setParameter(1, username).setParameter(2, password); 这样的写法也就是连写啊
也很容易出问题的啊
比较好的写法是:
Query query = em.createNativeQuery("select * from t_user where username= ? and password= ? ");
query.setParameter(1, username);
query.setParameter(2, password);
这是我最近开发碰到的问题啊
1.空指针的处理 String str = null;
if (str.equals(“xxxx”)) {
.......
}
String str = null;
if (str!=null && str.equals(“xxxx”)) {
......
}2.内存分配浪费的处理。
ArrayList list = new ArrayList();
list = Query.getList();//随便一个例子,这个可能不存在
这个例子,list已经分配了内存地址,然后又将一个新的内存地址赋给它。
虽然java不用让我们考虑内存分配的问题。但是一个对象构造的时候,开销也是比较大的。3.boolean的判断
boolean flag=false;
if(flag==true){
.......
}4.重复语句的提取
if(xxx==1){
method();
....
}else if(xxx==2){
method();
....
}else {
method();
.....
}
以上的语句换成swtich也一样。method每个分支都调用。
所以我们可以将它提取出来。
5.对象内容的比较
比如两个字符串内容比较
有人老不习惯性的用==去比较地址。
一旦创建的过程不同,那么可能就得到不同的比较结果。
所以最好用equals比较。
6.数据添加的问题
有时候我们从数据库取出数据后,遍历数据,将数据添加到一个list中
结果list显示的时候只有最后一条,说明,我们只对一个对象进行了操作。
通常我们这样做,就能避免这样的问题
List<XXX> list=new Array<XXX>();
XXX xxx=null;
while(rs.next()){
xxx=new XXX();
xxx.setName(rs.getString(...));
list.add(xxx);
}
问题太多了。不可能都说全面的
其实不规范导致bug的情况我还没见过,各位所说的都不是因为不规范,而是写的时候没有考虑清楚各种情况
if ( list == null){
return;
}
for(int i = 0; i < list.size(); i++){
//todo some method
}我觉的这么写也没有错,你可以试一试,和你优化后的代码没有效率差别,ArrayList的原码可以看出size的实现是
596 public int size() {
597 return lastIndex - firstIndex;
598 }
只有一个减法运算,没有其他的复杂的东西,而加减法在程序中是最快的运算。
LZ,,请用事实说话,
int i,size;
这样定义,哪里不规范了?请说明文档出处..===========================还有,程式的改进,一切都是为了"效率"...所有的工作都是为了程式执行的更快.....有时候,不规范的写法有可能比规范的写法执行的更快....所以,请不要过分追求"规范"
Vector v=new Vector(10);
for(int i=0;i<100;i++){
Object o=new Object();
v.add(o);
o=null;
}
我们只释放引用的本身。但是v依旧引用该对象。所以这个对象是无法被GC来回收的。
只有我们手动的将v设为空
对于链表式的 LinkedList 使用 Iterator 进行访问更快下标访问时,应把判断条件的 size 部分提交:for(int i = 0, k = list.size(); i < k; i++)这样的优化需要遵循一个原则:尽量缩小局部变量的作用范围。
while( (str = br.readLine()) != null ) {
...
}这样的 str 的作用域在外面的代码块中,不符合尽量缩小局部变量范围的原则。JDK 有个类中的代码是这样写的(具体哪个类我忘记了):for(String str = null; (str = br.readLine()) != null; ) {
...
}
return;
}
for(Iterator it=list.Iterator(); it.hasNext(); ){
Object ob=it.next();
//todo some method
}
下次给你好了,我都是发200的分