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();
}
} }