各种生成实例的方法

new

使用Java关键字new生成实例。
可以像下面这样生成Something类的实例并将其保存在obj变量中。

1
Something obj = new Something();

这时,类名(此处的Something)会出现在代码中。

clone

使用clone方法,根据现有的实例复制出一个新的实例。
可以像下面这样根据自身来复制出新的实例(不过不会调用构造函数)。

1
2
3
4
5
6
7
8
9
10
11
12
13
class Something {
public Something createClone() {
Something obj = null;

try {
obj = (Something) clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}

return obj;
}
}

newInstance

使用java.lang.Class类的newInstance方法可以通过Class类的实例生成出Class类所表示的类的实例(会调用无参构造函数)。
假设现在已经有了Something类的实例someobj,通过下面的表达式可以生成另外一个Something类的实例。

1
someobj.getClass().newInstance()

实际上,调用newInstance方法可能会导致抛出InstantiationException异常或是IllegalAccessException异常,因此需要将其置于try…catch语句块中或是用throws关键字指定调用newInstance方法的方法可能会抛出的异常。