您的位置:首页 > 产品设计 > UI/UE

JAVAGUIDE(学习笔记1)

2004-10-11 18:04 1021 查看
Javaコーディングガイドライン
1:Private,Public使用恰当。
2:原始和参照型的区别:
①原始型(byte,boolen等)实例化的时候不要分配内存空间,所以速度和内存使用上比参照型要好。
 ②原始型的默认值是根据类型而定,而参照型的默认值是NULL。
③原始型保存时他的值,而惨参照型保存的是他的地址,所以下面两段程序的含义不一样
inti=5;
intj=i;
由于保存的是值,所以I的改变不会影响到j
Integerk=newInteger(5);
Integetl=k;
保存的是地址,k的改变会影响到l
④所以在函数当参数传递的时候要特别注意。
importjava.awt.Point;
classBadSample{
voidmodifyValue(intvalue,Pointpoint){
value=10;
point.setLocation(55,77);
}
voidprintValue(intvalue,Pointpoint){
StringBufferbuffer=newStringBuffer();
buffer.append(value);
buffer.append(":");
buffer.append(point);
System.out.println(buffer);
}
publicstaticvoidmain(String[]args){
intintValue=0;
Pointpoint=newPoint(0,0);
BadSamplesample=newBadSample();
sample.printValue(intValue,point);
sample.modifyValue(intValue,point);
sample.printValue(intValue,point);
}
}
【実行結果】
0:java.awt.Point[x=0,y=0]
0:java.awt.Point[x=55,y=77]
可以看出,modifyValue()中对value的改变并没有改变main中的intValue的值。对于原始型参数的传递,可以看成是传递的是值得拷贝,对于参照型参数的传递,函数内的改变会影响到他的值。
3:尽量使用本地变量
访问本地变量比访问类变量更节约时间。
classBadSample{
privateintresult;
voidsum(int[]values){
for(inti=0;i<values.length;i++){
result+=values[i];//違反
}
}
}
classFixedSample{
privateintresult;
voidsum(int[]values){
intsum=result;
for(inti=0;i<values.length;i++){
sum+=values[i];
}
result=sum;
}
}

4:用equals()比较object的相等。
特别注意String,我曾经犯过,很难查错。
5:不使用的变量及时负值null,避免浪费空间。
classBadSample{
publicstaticvoidmain(String[]args){
TestClasstest=newTestClass();
StringfirstString=“first”;
test.method(firstString);
・・・
StringsecondString=“second”;
test.method(secondString);
・・・
StringthirdString=“third”;
test.method(thirdString);
・・・                  //違反
}

}
classFixedSample{
publicstaticvoidmain(String[]args){
TestClasstest=newTestClass();
StringfirstString=“first”;
test.method(firstString);
・・・
firstString=null;
StringsecondString=“second”;
test.method(secondString);
・・・
secondString=null;
StringthirdString=“third”;
test.method(thirdString);
・・・
thirdString=null;//修正済み
}

}
4:常量的使用场合
classFixedSample{
privatestaticfinalintARRAY_SIZE=1000;
int[]getArray(){
returnnewint[ARRAY_SIZE];//修正済み
}

privatestaticfinalStringSTART=“start”;

System.out.println(START);

publicstaticfinalStringLINE_SEPARATOR=
System.getProperty(“line.separator”);
  :
System.out.println(“改行”+LINE_SEPARATOR);
}
5:变量初期化的时候附初值。
6:对list做循环的时候,用Iterator,效率比较高。
publicvoiddoXXX(Listl){
for(Iteratori=l.iterator();i.hasNext();){[/b]
Useru=(User)i.next();[/b]
}[/b]
}
7:不要在for循环中改变循环子。
publicclassBadSample{
intbadSampleMethod(){
intsum=0;
for(inti=0;i<100;i++){
i+=3;//違反
sum+=i;
}
}
}

publicclassFixedSample{
intfixedSampleMethod(){
intsum=0;
//修正済み
for(inti=0;i<100;i+=4){
sum+=i;
}
returnsum;
}
}
8:如果一个实例变量在程序中不会改变其值,尽量定义为final,因为final是同步的,编译效率比较高。
9:在循环中尽量不要New一个OBJ,那样会不停的分配资源。
publicclassBadSample{
publicvoidbadSampleMethod(intmax){
for(inti=0;i<max;i++){
StringBuffersampleBuffer=
newStringBuffer();
//違反
sampleBuffer.append(“loop:“);
sampleBuffer.append(i);
System.out.println(
sampleBuffer.toString());
}
}
}
publicclassFixedSample{
publicvoidfixedSampleMethod(intmax){
StringBuffersampleBuffer=
newStringBuffer();
//修正済み
for(inti=0;i<max;i++){
sampleBuffer.append(“loop:“);
sampleBuffer.append(i);
System.out.println(
sampleBuffer.toString());
sampleBuffer.setLength(0);
//初期状態に戻す
}
}
}
10:equals()和hashCode()要同时覆盖

publicfinalclassIDNumber{
privatefinalintid;
publicIDNumber(intid){
this.id=id;
}

publicbooleanequals(Objectobject){
booleanisEqual=false;
if(object==this){
isEqual=true;
}elseif(objectinstanceofIDNumber){
IDNumberidNum=(IDNumber)object;
if(idNum.id==this.id){//idの値が等しければtrueを返す
isEqual=true;
}
}

returnisEqual;
}
}

publicinthashCode(){
intresult=17;
result=37*result+id;//id属性を利用しているので、同じidであれば同じ値が返る
returnresult;
}

11:调用一个class的clone方法,该class必须要实现cloneable类。覆盖clone方法的时候,一定要调super的clone方法。
12:覆盖finalize方法时,一定要调super的finalize方法。
13:数组复制用System.arraycopy()。
publicclassFixedSample{
int[]copyArray(int[]array){
intlength=array.length;
int[]copy=newint[length];
System.arraycopy(array,0,
copy,0,length);//修正済み
returncopy;

}
}
14:由于interface可以实现多重继承,而抽象类不可以,所以建议尽量使用interface。
15:定义一个默认的构造函数,这样可以用Class.newInstance()动态的生成一个对象。
16:避免if(method()==true);直接写if(method())效率比较高。
17:尽量不要在方法内改变或返回参数,因为可能改变外部参数本身的值,最好在方法中new一个obj返回。
18:尽可能的重载toString方法,可以使程序的调试更方便。
19:不想被覆盖的方法写成final,这样别人就不能对其进行覆盖了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: