java反射 之Class类

java反射 之Class类

任何一个类都是Class的实例对象,这个实例对象有三种表示方法

第一种方法表示

实际在告诉我们任何一个类都有一个隐含的静态成员

        Class c1 = Foo.class;

查看Class类的源码

                /*
		 * Constructor. Only the Java Virtual Machine creates Class objects.
		 * 
		 * */
                private Class() {}

 第二种表达方式

已知道该类的对象通过个getClass方法

    Class c2 = foo1.getClass();
        // 官网 c1,c2表示了Foo类的类类型(ClassType) 类也是对象,
        // 是Class类的实例对象 这个对象我们称之为类类型

测试c1 c2

System.out.println(c1 == c2);
输出 true 不管c1 c2 都代表类的类类型,一个类只可能是Class类的一个实例对象

第三种表达方式

	Class c3 = null;
		try {
			c3 = Class.forName("reflect.Foo");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

测试c2 c3

System.out.println(c2 == c3);
输出true  可以通过类的类类型创建该类的对象实例--->通过c1 c2 c3 创建Foo的实例
	try {
			Foo foo = (Foo) c1.newInstance();//需要无参数的构造方法
			foo.print();                //调用方法
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
完整代码

package reflect;

/**
 * Class类
 * 
 * @thor wangb
 * 
 */
public class ClassDemo1 {

	public ClassDemo1() {
	}

	public static void main(String[] args) {
		// Foo的实例对象如何表示
		Foo foo1 = new Foo();
		/*
		 * Constructor. Only the Java Virtual Machine creates Class objects.
		 * 
		 * private Class() {}
		 */
		// 任何一个类都是Class的实例对象,这个实例对象有三种表示方法
		// 第一种方法表示 实际在告诉我们任何一个类都有一个隐含的静态成员
		Class c1 = Foo.class;
		// 第二种表达方式 已知道该类的对象通过个getClass方法
		Class c2 = foo1.getClass();
		// 官网 c1,c2表示了Foo类的类类型(ClassType) 类也是对象,
		// 是Class类的实例对象 这个对象我们称之为类类型
		System.out.println(c1 == c2); // 输出 true 不管c1 c2 都代表类的类类型,
										// 一个类只可能是Class类的一个实例对象
		Class c3 = null;
		try {
			c3 = Class.forName("reflect.Foo");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		System.out.println(c2 == c3);// 输出true
		// 我们可以通过类的类类型创建该类的对象实例--->通过c1 c2 c3 创建Foo的实例
		try {
			Foo foo = (Foo) c1.newInstance();//需要无参数的构造方法
			foo.print();                //调用方法
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
	}

}

class Foo {
	void print() {
	}
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值