读书笔记
------------------java代码优化
1、建议1:不要在常量和变量中出现易混淆的字母
包全小写,类首字母全大写,常量全部大写并用下划线分割,变量采用驼峰
命名法。Long类型变量,后缀用大写L,
2 建议2:莫让常量蜕变成变量
3 建议3:三木运算符类型务必一致
int i=80;
如 string s1=String.valueOf(i<100:90:100.0)
注意 s1为90.0(java虚拟机,会自动将int向float转型)
4 建议4:避免带有变长参数方法重载
void getPrice(int i,int j)
void getPrice(int i,int ...j)
这种形式的方法的重载,如果调用getPrice(5,5)。java调用前者方法
5 建议5:别让null值和空值威胁到变长方法
6 建议6:覆写变长方法也循规蹈矩
1 重写方法不鞥年缩小访问的权限
2 参数列表必须与被重写方法相同
3 返回类型必须与被重写方法相同或者为子类
4 重写方法不能抛出新的异常,或者超出父类范围的异常,但是可以抛出
更少,更有限的异常,或者不抛出异常
例如:父类中(Base) void fun(int price,int ...discounts);
子类中(Sub) void fun(int price,int[] discounts);
Base b=new Sub();
b.fund(100,50);
结果编译通过,在fun(100,50)调用过程中正确执行。原因是
base对象是把子类对象sub做了向上转型,形参
列表由父类决定的,由于是变长参数
,在编译的时候,第二个参数50被处理为一个只含有一个整数的数组,然后再由子类执行。
此时,子类正好接受一个数组,股可以成功执行。
7 建议7: 警惕自增的陷阱
i++ 先赋值在加1 ++i先加1在赋值
但是 如 int count=0;
count=count++;
结果count值为0;
但是C++ 中却为1,C++中 count=count++与java中count++ 一样
注意 java中 count++ 运行实质。我们可以理解为
public int semeler(int count){
int temp=count;//一个保存变量原先值的临时变量
count=count+1;
return temp;
}
8 建议8:不要让就语法困扰你
9 建议9 :少用静态导入
静态导入可以,让我们不用再重复写类名和直接使用类中静态属性和方法。但是容易造成程序的
模糊和混乱。所以要少用
10 建议10:不要在本类中覆盖静态导入的变量或者方法
11 建议11: 养成良好习惯,显示生命uid
流标识,即,类的版本定义,特别在序列化编程时候保证类的版本一致性
12 建议12:避免
用序列化类在构造函数中为不变量赋值
比如类中 定义了 public final String name=“abc”;
通过序列化后保存了,然后该类被修改,name变为了123.此时通过反序列化读取的那么为123
因为在反序列化name时候,name为final,只能赋值一次,此时会从类中刷新
13 建议13:避免为final变量复杂赋值
比如方法返回值赋值
14 建议14:使用序列化类的方法巧妙解决部分属性持久化问题
在序列化和反序列化过程中需要特殊处理的类必须使用下列准确签名来实现特殊方法:
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
private void readObjectNoData()
throws ObjectStreamException;
例如
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
out.defaultWriteObject();
out.writeInt(salary.getBasePay());
}
// 反序列化时委托方法
private void readObject(java.io.ObjectInputStream in) throws IOException,Class-
NotFoundException {
in.defaultReadObject();
salary = new Salary(in.readInt(),0);
}
15 建议15:break玩玩不可忘
switch中的case中break一定不能忘掉,否则
程序业务就相差万里!
16 建议16:易变业务使用脚本语言编写
PHP、Ruby、Groovy、javaScript 特点是在运行期解释执行。可以让我们不用重新部署应用
而修改某些逻辑
17 建议17:慎