1、java对象变量相当于C++的对象指针
Date birthday;//java 相当于Date *birthday;//C++
2、java中必须用clone方法来获得对象的完整拷贝
3、java对象都是在堆中构造的
4、若需要返回一个可变对象的引用,先对它进行克隆(clone)。对象克隆指存放在另一个位置上的对象副本
class Employee
{
...
public Date getHireDay()
{
return hireDay;
}
...
private Date hireDay;
}//这样会破坏封装性,很容易就会改变对象的私有状态
修改后
class Employee
{
...
public Date getHireDay()
{
return Date.hireDay.clone();
}
...
private Date hireDay;
}
5、对于可变的类,使用final修饰符可能会对读者造成混乱:
private final Date hiredate;
仅仅意味着存储在hiredate变量中的对象引用在对象构造之后不能被改变。而并不意味着hiredate对象是一个常量
6、Math类中的pow是一个静态方法,静态方法不能向对象实施操作,使用类名进行调用
7、使用静态方法的两种情况:
- 方法不需要访问对象状态,所需参数是通过显示参数提供;
- 方法只需要访问类的静态域
9、NumberFormat类使用Factory方法产生不同风格的格式对象NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
NumberFormat percentFormatter = NumberFormat.getPercentInstance();
double x = 1.0;
System.out.println(currencyFormaatter.format(x)); //prints $0.10
System.out.println(percentFormatter.format(x)); //prints 10%
为什么NumberFormat类不利用构造器完成这些操作呢?这主要有两个原因:
- 无法命名构造器。构造器的名字必须与类同名。但是,这里希望得到的货币实例和百分比实例采用不同的名字。
- 当使用构造器时,无法改变所构造的对象类型。而Factory方法将返回一个DecimalFormat类的对象,这是NumberFormat的子类