Java反射学习总结(1)——Class类的使用

在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象(Class类不能人为创建由JVM自动调用),用于表示这个类的类型信息。所以说:类也是对象,并且它是java.lang.Class类的实例对象。获取Class实例对象主要有三种方式:

package reflectTest;
public class ClassDemo {
	public static void main(String[] args) {
		//Foo的实例对象如何表示,可以通过如下我们熟知的方式
		Foo foo1 = new Foo();
		//但是Foo这个类其实也是一个实例对象,它是Class类的实例对象
		//其实任何一个类都是Class的实例对象,这个实例对象我们称为对应类的类类型(class tyoe)
		//实例对象有三种表示方式
		//第一种表示方式:实际在告诉我们任何一个类都有一个隐含的静态成员变量class
		Class c1 = Foo.class;
		//第二种表示方式 : 已经知道该类的对象通过getClass方法
		Class c2 = foo1.getClass();
		//第三种表示方式:可以用来实现类的动态加载
		Class c3 = null;
		try {
			c3 = Class.forName("reflectTest.Foo");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//不管c1,c2,c3都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象
		System.out.println(c1 == c2); //输入true
		System.out.println(c2 == c3); //输出true
		//可以通过类的类类型创建该类的对象实例---->通过c1 or c2 or c3创建Foo的实例对象
		try {
			Foo foo = (Foo)c1.newInstance();//需要有无参数的构造方法
			foo.print(); //输出foo
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

class Foo{
	void print(){
		System.out.println("foo");
	}
}
其实不止类有类类型,基本数据类型和像void这些关键字也有类类型:

package reflectTest;

public class ClassDemo2 {
	
	public static void main(String[] args) {
		
		Class c1 = int.class;//int 的类类型
		Class c2 = String.class;//String类的类类型
		Class c3 = double.class;
		Class c4 = Double.class;
		Class c5 = void.class; //void的类类型
		
		System.out.println(c1.getName()); //输出int
		System.out.println(c2.getName()); //输出java.lang.String
		System.out.println(c2.getSimpleName());//不包含包名的类的名称,输出String
		System.out.println(c5.getName());// 输出void
	}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值