最简单的方式 使用 new 关键字,调用构造函数
package aa; public class CC { public CC() { // TODO Auto-generated constructor stub System.out.println("cc is created"); } public static void main(String[] args) { // TODO Auto-generated method stub CC cc = new CC(); } }
试验结果:`cc is created
使用Class类的newInstance方法,调用构造函数
package aa; public class CC { public CC() { // TODO Auto-generated constructor stub System.out.println("Class.forName()"); System.out.println("cc is created"); } public static void main(String[] args) { // TODO Auto-generated method stub try { CC C = (CC)Class.forName("aa.CC").newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
试验结果
Class.forName() cc is created
使用Reflect包中的Constructor类的newInstance方法,调用构造函数
package aa; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; public class CC { public CC() { // TODO Auto-generated constructor stub System.out.println("constructor.newInstance()"); System.out.println("cc is created"); } public static void main(String[] args) { // TODO Auto-generated method stub try { Constructor<CC> constructor = CC.class.getConstructor(); CC c = constructor.newInstance(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
试验结果
constructor.newInstance() cc is created
使用clone方法创建对象,其中Cloneable接口为标志接口,Clonable接口没有一个方法
package aa; public class CC implements Cloneable { public CC() { // TODO Auto-generated constructor stub System.out.println("sss"); System.out.println("cc is created"); } @Override protected Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub CC cc =null; cc = (CC) super.clone(); return cc; } @SuppressWarnings("unused") public static void main(String[] args) { // TODO Auto-generated method stub CC cc = new CC(); try { CC cc2 = (CC) cc.clone(); } catch (CloneNotSupportedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
试验结果:
sss cc is created
上面的构造函数是由 new 的操作产生的,说明clone方法并没有调用构造函数
java 创建对象的几种方式
最新推荐文章于 2023-10-19 18:15:49 发布