demo 地址 http://pan.baidu.com/s/1bo2FG1T
package com.ws.study; /** * @author Administrator * */ public class constructorA { /** * 构造函数 */ public constructorA(){ System.out.println("这是一个无参数构造函数"); } /** * 有参数的构造函数 * @param i * @param j */ public constructorA(int i,int j){ System.out.println(i + "x" + j +"=" + i*j); } public static void main(String[] args) { try { /** * 先来个热身,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?你第一想到的肯定是new,但是注意一点: A a = (A)Class.forName(“pacage.A”).newInstance(); 这和你 A a = new A(); 是一样的效果。 newInstance()是方法 ,new 是关键字 创建对象的方式不一样,newInstance使用类加载机制,后者是创建一个新类 newInstance()只能调用无参构造方法,而new关键字创建对象不受限制。 newInstance()类已加载,已连接,new 类可以没被加载 newInstance()弱类型,低效率,只能调用无参构造。 new强类型,相对高效能调用任何public的方法。 Class.forName()返回的是类 Class.forNmae().newInstance()返回的object() */ constructorA cons= (constructorA) Class.forName("com.ws.study.constructorA").newInstance(); new constructorA(3, 2); } 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(); } } }
/** * */ package com.ws.study; /** * @author Administrator * */ public class constructorB { /** * */ public constructorB() { System.out.println("这是一个无参数构造函数B"); // TODO Auto-generated constructor stub } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub constructorA cona=new constructorA(1,2); new constructorB(); try { Class.forName("com.ws.study.constructorA").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(); } } }
时间: 2024-10-06 19:12:38