一、
								
								General Techniques
						
				
		
		
				
						
								1、  
						
						引数以
						by value 
						方式而非
						 by reference 
						方式传递
				
		
		
				
						
								2、  
						
						对于不变的
						data
						和
						object reference
						使用
						final ,final
						仅仅令
						object reference
						自身成为不变量,但并不限制它所指向对象的改变
				
		
		
				
						
								3、  
						
						缺省情况下,所有
						non-static
						都可以被覆写,不然
						,
						则用
						final
						防止覆写
				
		
		
				
						
								4、  
						
						vector
						容器包含的是对象,与
						arrays
						要区别,但我认为
						Vector
						的功能实际上有些像跟
						Array List
						差不多,只是
						vector
						现在不经常使用
				
		
		
				
						
								5、  
						
						多态优于
						instanceof
						,只有在不得已的情况下使用
				
		
		
				
						“如果你根据对象的型别来触发行为,那就改给自己一个耳光”
				
		
		
				
						例如,当你必须从一个
						base type
						做向下转型为
						derived type
						的时候,必须使用它
				
		
		
				….
		
		
				Vector shapeVector = new Vector(10);
		
		
				shapeVector.add(new Triangle());
		
		
				shapeVector.add(new Triangle());
		
		
				shapeVector.add(new Circle());
		
		
				
						    //...
		
		
				
						    //Assume many Triangles and Circles are added and removed
		
		
				
						    //...
		
		
				
						    int size = shapeVector.size();
		
		
				
						    for (int i=0; i<size; i++)
		
		
				
						    {
		
		
				
						      Object o = shapeVector.get(i);
		
		
				
						      if (o instanceof Triangle)
		
		
				
						      {
		
		
				
						        if (((Triangle)o).isRightTriangle())
		
		
				
						        {
		
		
				
						          //...
		
		
				
						        }
		
		
				
						      }
		
		
				
						      else if (o instanceof Circle)
		
		
				
						      {
		
		
				
						        double rad = ((Circle)o).radius();
		
		
				
						        //...
		
		
				
						      }
		
		
				}
		
		
				
						         
						6
				
				、一旦不需要对象的引用,就将它设为
				null
				;
				
						
						
				
		
		
				
						       
				
				尽管有
				GC,
				你还是要关注的你的代码如何运用内存;
				
						
						
				
		
		
				
						         
						
						
				
		
		
				
						 
				
		
		
				
						
								二、  
						
						对象与相等性
				
				
						
						
				
		
		
				7
				、区分
				reference type
				和
				primitive type
				,理解他们的差异,你会在运用他们时候做出明智的
				
						
						
				
		
		
				选择;
				
						
						
				
		
		
				
						         Boolean(boolean)
		
		
				
						         Character(char)
		
		
				Byte(byte)
		
		
				Integer(int)
		
		
				Float(float) 
		
		
				Long(long)
		
		
				Short(short)
		
		
				Double(double)
		
		
				基本型别相等,只要是值相等就可以拉,不管是不是同一类型;而引用类型必须则按照引用的比较方式来比较,譬如
				equals();
		
		
				
						 
				
		
		
				8
				、
				java.lang.object
				提供的
				equals()
				方法很多时候不是你想要的,你需要自己写一些比较的方法
				
						
						
				
		
		
				public boolean equals(Object obj)
		
		
				
						  {
		
		
				
						 
				
		
		
				
						    if (this == obj)
		
		
				
						      return true;
		
		
				
						 
				
		
		
				
						    if (obj != null && getClass() == obj.getClass())
		
		
				
						    {
		
		
				
						      Golfball gb = (Golfball)obj;  //Classes are equal, downcast.
		
		
				
						      if (brand.equals(gb.brand()) &&  //Compare attributes.
		
		
				
						          make.equals(gb.make()) &&
		
		
				
						          compression == gb.compression())
		
		
				
						      {
		
		
				
						        return true;
		
		
				
						      }
		
		
				
						    }
		
		
				
						    return false;
		
		
				
						  }
		
		
				
						 
				
		
		
				
						
								三、  
						
						java
						异常
				
				
						
						
				
		
		
				
						1、   
				
				try,cacth,finally
		
		
				
						 
				
		
		
				不要将
				catch
				的异常覆盖掉,在这样的情况下,我们要专门把异常保存下来,如用一个
				vector
				保存;
				
						
						
				
		
		
				不要忽略任何一个异常,因为异常一旦出现,抛出异常的那个线程将会终止;
				
						
						
				
		
		
				将一个异常加入到
				throw
				子句,会影响到调用它的所有函数
				
						
						
				
		
		
				使用
				finally
				防止资源泄露,譬如在连接数据库的时候在
				finally
				中关闭连接;
				
						
						
				
		
		
				不要从
				try
				字段中返回;
				
						
						
				
		
		
				不要用
				try
				、
				catch
				用于流程控制
				;
		
		
				不要每逢出错的使用
				try
				和
				catch;
		
		
				不要在构造函数中抛出异常;
				
						
						
				
		
		
				抛出异常前,请将对象置为有效状态;
				
						
						
				
		
		
				
						
								四、  
						
						性能
				
				
						
						
				
		
		
				
						1、   
				
				先把焦点放在设计,数据机构和算法方面
				
						
						
				
		
		
				
						2、   
				
				如果进行字符串的拼接,用
				String Buffer
				比
				 String 
				快许多倍
				
						
						
				
		
		
				
						3、   
				
				在面向对象中,对象的创建是昂贵的,因此需要将对象的创建成本降到最低,减少一些没有必要的对象,在非必要的时候,别产生你的对象
				
						
						
				
		
		
				
						4、   
				
				将同步减少到最低,增加
				stack
				的使用
				
						
						
				
		
		
				
						5、   
				
				使用基本型别代码会更快
				
						
						
				
		
		
				
						6、   
				
				在使用
				vector
				时候,用
				get()
				来获取对象,而不是
				Interator
		
		
				
						7、   
				
				优先使用
				array,
				再考虑
				ArrayList
				与
				Vector
				,如果不需要
				vector
				的同步特性,考虑使用
				ArrayList
		
		
				
						8、   
				
				尽可能的重复使用对象,这比重新创建对象更有效
				
						
						
				
		
		
				
						9、   
				
				使用缓式评估,延迟计算,不必要的计算永远都不要计算
				
						
						
				
		
		
				
						10、
				
				手动优化你的代码,特别是执行的顺序