实现高效Java编程的9条基础规则

转载请注明出处:http://blog.csdn.net/joker_ya/article/details/40954889

最近摘录了有关程序优化的文献,在这里贴出来和大家分享一下。


实现高效Java编程的9条基础规则

1.避免使用New关键字来创建String对象,把一个String常量复制到String对象中通常是多余的。例如下面的代码:

public class Test {
	private String str=new String("1");//这里新建对象是完全没有必要的
	private String str2="2";//正确的应该如此
	public void method(){
		System.out.print(str);
	}	
}

2.避免使用不必要的嵌套,过多的嵌套会使你的代码复杂化,减弱可读性。例如下面的代码:

public class Test {
	String add(){
		int c=(a=a+b)+b;//过于复杂
		return c;
	}
}

3.避免在同一行声明不同类型的多个变量,这样可以是程序更加清晰。例如下面的代码:

private int index,index1[];
正确的写法应如下:

private int index;
private int index1[];

4.在每一行中写一条语句,但for语句除外。例如"for (int i=0;i<10;i++) x--;",这样可以增加代码的可读性,例如下面的代码:

public class OSPL {
	int mothod(int a, int b) {
		int i = a + b;return i;//可读性不强
	}
}

正确的写法应如下:

public class OSPLFixed {
	int mothod(int a, int b) {
		int i = a + b;
		return i;
	}
}


5.经常从finalize()中调用super.finalize()。此处的finalize()和finally不同,它是Java在进行垃圾收集时调用。即使我们的父类没有定义finally()也应该调用。这里有如下两个原因:

  • 在不改变代码的情况下能够将父类的finally方法加到你的类中;
  • 以后你会养成习惯调用父类的finally方法,即使父类没有定义finally方法。
正确的写法应如下:

public class parentFinalize {
	protected void finalize() throws Throwable{
		super.finalize();
	}
}


6.不要在finalize()中注销listeners。finalize()只有在没有对象引用时调用,如果listeners从finalize()方法中去除了,则被finalize的对象将不会在垃圾收集中去除。例如下面的代码:

public void finalize() throws Throwable{
		bButton.removeActionListener(act);
	}


7.不要显式地调用finalize()方法。虽然显式地调用这个方法可以确保你的调用,但是当该方法收集了以后垃圾收集会再收集一次。例如下面的代码:

public class T7 {
	public void finalize() throws Throwable{
		close_resources();
		super.finalize();
	}

	public void close_resources() {
		// TODO Auto-generated method stub
		
	}
}	

class Test{
	private t71=new T7();
	void cleanup() throws Throwable{
		t71.finalize();//调用
		t71=null;
	}
}
对于上述调用,应该自行创建一个释放方法,完成finalize()所作的事情,当每次想显式地调用finalize()时实际上调用了释放方法。然后再使用一个判断字段来确保这个方法只执行一次,以后再调用就没关系了。例如下面的代码:

public class T7 {
	public synchronized void release() throws Throwable{
		if (!_released){
			close_resources();
			did _released=true;
		}	
	}
	public void finalize() throws Throwable{
		release();
		super.finalize();
	}
	public void close_resources() {
		// TODO Auto-generated method stub
		private boolean _released=false;
	}	
	class TestFixed{
		private t71=new T7();
		void closeTest() throws Throwable{
			t71.trelease();//FIXED
			t71=null;
		}
	}
}	

8.尽量少用不推荐的API,而应尽量使用JDK推荐的API。在类,方法和Java组件中有很多方法,其中有一些方法SUN用”deprecated“做了标记,建议读者最好不要使用。例如下面的代码:

private List t_list =new List();
	t_list.addItem(str);
细心的读者如果检索一下JavaDoc,会发现在里面建议使用add()来代替addItem()。


9.为所有序列化的类创建一个”serialVersionUID“,可以避免从各种不同的类破坏序列的兼容性。如果不特别设置一个UID,那么系统将会自动生成一个UID(根据类的内容)。如果UID在新版本的类中发生了改变,即使那个被序列化的类未改变,也不能反序列化老的版本了。例如下面的代码:

public class DUID implements java.io.Serializable {
	public void mothod(){};
}
在里面加一个UID,当这个类的序列化形式发生了改变时,只需改变这个UID即可。例如下面的代码:

public class DUIDFixed implements java.io.Serializable {
	public void mothod(){};
	private static final long serialVersionUID=1;
}	








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值