Java class.forname()和newinstance

<Think in java >这本书的实例代码。

例子一、

package com.yuan.test;

//: typeinfo/SweetShop.java
//Examination of the way the class loader works.
class Candy {
	static {
		System.out.println("Loading Candy");
	}
}

class Gum {
	static {
		System.out.println("Loading Gum");
	}
}

class Cookie {
	static {
		System.out.println("Loading Cookie");
	}
}

public class SweetShop {
	public static void main(String[] args) {
		System.out.println("inside main");
		new Candy();
		System.out.println("After creating Candy");
		try {
			Class.forName("Gum");
		} catch (ClassNotFoundException e) {
			System.out.println("Couldn’t find Gum");
		}
		System.out.println("After Class.forName(\"Gum\")");
		new Cookie();
		System.out.println("After creating Cookie");
	}
}
//输出结果
inside main
Loading Candy
After creating Candy
Couldn’t find Gum
After Class.forName("Gum")
Loading Cookie
After creating Cookie

//仔细研究了一下之后,对Class.forname(0的使用方法有了一些了解。例子一中没有找到Gum类的原因是,我在Class.forname("这里面没有指明类文件包文件名称+类名称")。我在例子二中给出了全名称之后就可以了。

例子二、

package com.yuan.test;

//: typeinfo/SweetShop.java
//Examination of the way the class loader works.
class Candy {
	static {
		System.out.println("Loading Candy");
	}
}

class Gum {
	static {
		System.out.println("Loading Gum");
	}
	public void getA(){
		System.out.println("调用我哦!");
		
	}
}

class Cookie {
	static {
		System.out.println("Loading Cookie");
	}
}

public class SweetShop {
	public static void main(String[] args) {
		System.out.println("inside main");
		new Candy();
		System.out.println("After creating Candy");
		try {
		Class c=Class.forName("com.yuan.test.Gum");
		Object obj=null;
		System.out.println("123:"+c.getName());
		Gum gum=(Gum)c.newInstance();
	        gum.getA();
	
		} catch (ClassNotFoundException e) {
			System.out.println("Couldn’t find Gum");
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("After Class.forName(\"Gum\")");
		new Cookie();
		System.out.println("After creating Cookie");
	}
}

总结:Class.forname()实际上是获得类的申明。

Class c=Class.forName("com.yuan.test.Gum");

要想调用类的方法得这样做。使用 Class 的newinstance()方法来实例该类。

Object obj=null;
Gum gum=(Gum)c.newInstance();
gum.getA();


转载于:https://my.oschina.net/u/2308739/blog/401733

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值