J2EE框架(二)Class

Class是反射的基础,我们先看看API的说明:


Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象。 Class 没有公共构造方法Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。


注意几个关键语句:


1、共享该 Class 对象,证明Class是一个对象

2、Class 没有公共构造方法,证明创建Class对象时不会调用构造方法来创建Class对象(我们知道普通对象的创建都会去调用构造方法来实现创建)

3、Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。这里类加载器证明是在我们需要的时候把.class动态加载到内存,并创建对象,创建对象的类型为Class


2、我们再来看看几段代码:


普通类Cat

public class Cat {
	// 静态模块
	static {
		System.out.println("我是静态内容");
	}


	// 无参构造方法
	public Cat() {
		System.out.println("我是构造方法");
	}

}

测试类1

public class T {

	@Test
	public void testClass() throws InstantiationException, IllegalAccessException, ClassNotFoundException{	
		Class<?> cl=	 Class.forName("com.lovo.Cat",true,Cat.class.getClassLoader());
		System.out.println(cl.toString());
		
	}
}
 
 

运行结果:

我是静态内容
class com.lovo.Cat

测试类2
public class T {


	@Test
	public void testClass() throws InstantiationException, IllegalAccessException, ClassNotFoundException{	
		Class<?> cl=	 Class.forName("com.lovo.Cat",true,Cat.class.getClassLoader());
		//System.out.println(cl.toString());
	     System.out.println(cl.newInstance());
		//Cat cat=new Cat();
		
	}
}
运行结果:

我是静态内容
我是构造方法
com.lovo.Cat@18bf6bf

分析结果:

1、测试类1静态模块代码打印在控制台上,证明Cat类已经加载到内存,因为我们知道静态代码在类加载的时候会去实例化放(静态类我们都是去点出方法或属性而不是先去new对象,因为在类加载时候已经实例化放入到静态池),这里仅代表加载到内存

2、我们注意到Cat的构造方法并没执行,说明Cat并没有被实例化,而我们在测试1用了一个Class来接收(想一想我们普通类被new时都会用一个类型进行接收),所以这时候只代表我们创建了Class对象,在这个对象中我们可以得到此对象引用类的所有方法、属性、构造方法、修饰,这就为反射做好铺垫。

3、测试2调用Class对象的newInstance()方法,结果静态模块执行,构造方法也执行,证明我们在调用newInstance()方法时,虚拟机把Class对象再次实例化成一个具体的Object对象,此时就和我们new Cat() 是一回事调用构造方法来实例化对象。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值