java开发总结

来源:互联网 发布:为什么淘宝助理打不开 编辑:程序博客网 时间:2024/05/22 12:22

1、字符串函数substring(beginIndex, endIndex):是冲beginIndex开始包括beginIndex),到endIndex但不包括endIndex)。


2、字符串函数substring(beginIndex,beginIndex):取值为空。

例如String tempStr = "sdfsdf".substring(0,0); (tempStr的值为空"")。


3、Object tempObj = map.get("ss"),而map中并没有此key时,此句不会报异常(tempObj=null)


4、程序中写查询sql时,尽量不用*(select * from tableName),而是要吧查询的字段都写出来,因为根据数据的查询规则使用*进行查询时的效率要慢。(具体规则忘了)


5、在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。 

  1. import java.util.vector;  
  2. class cel {  
  3.     void method (vector vector) {  
  4.         for (int i = 0; i < vector.size (); i++)  // violation  
  5.             ; // ...  
  6.     }  
  7. }  
更正: 
  1. class cel_fixed {  
  2.     void method (vector vector) {  
  3.         int size = vector.size ()  
  4.         for (int i = 0; i < size; i++)  
  5.             ; // ...  
  6.     }  
  7. }  


6、将try/catch块移出循环 

把try/catch块放入循环体内,会极大的影响性能,如果编译jit被关闭或者你所使用的是一个不带jit的jvm,性能会将下降21%之多! 

例子:         

  1. import java.io.fileinputstream;  
  2. public class try {  
  3.     void method (fileinputstream fis) {  
  4.         for (int i = 0; i < size; i++) {  
  5.             try {                                      // violation  
  6.                 _sum += fis.read();  
  7.             } catch (exception e) {}  
  8.         }  
  9.     }  
  10.     private int _sum;  
  11. }  

   
更正:         
将try/catch块移出循环 

  1. void method (fileinputstream fis) {  
  2.        try {  
  3.            for (int i = 0; i < size; i++) {  
  4.                _sum += fis.read();  
  5.            }  
  6.        } catch (exception e) {}  
  7.    }  


7、不要在循环体中实例化变量 

在循环体中实例化临时变量将会增加内存消耗 


例子:  
  1. import java.util.vector;  
  2. public class loop {  
  3.     void method (vector v) {  
  4.         for (int i=0;i < v.size();i++) {  
  5.             object o = new object();  
  6.             o = v.elementat(i);  
  7.         }  
  8.     }  
  9. }  

         
更正:         
在循环体外定义变量,并反复使用 
 
       
  1. import java.util.vector;  
  2. public class loop {  
  3.     void method (vector v) {  
  4.         object o;  
  5.         for (int i=0;i<v.size();i++) {  
  6.             o = v.elementat(i);  
  7.         }  
  8.     }  
  9. }  


8、序列化(fastjson序列化get方法的执行)

        实体类中的非public、static属性都会被序列化。

        而序列化的过程中会自动调用属性的get方法(个人认为是取该属性的值进行序列化):已验证

        反序列的过程中会自动调用属性的set方法(个人认为是为该对象的属性赋值):未验证

      例如:序列化类Teacher object

   在执行JSON.toJSONString(object)此句中就会调用该对象属性的get方法,
序列化后该属性的值是get方法的返回值

public class Teacher {        private int id;        private List<Student> students;        public BaseTestItemGroup() {        }        public int getId() {return id;}public void setId(int id) {this.id = id;}        public List<Student> getStudents() {//在此可以加入一些逻辑处理,在序列的时候会自动执行(已验证)/**逻辑处理代码(省略)*/return students;}public void setStudents(List<Student> students) {//在此可以加入一些逻辑处理,在反序列的时候会自动执行(为验证)/**逻辑处理代码(省略)*/this.students = students;}}


                                             
2 0
原创粉丝点击