J2EE框架(二)Class
来源:互联网 发布:linux双机热备方案 编辑:程序博客网 时间:2024/06/01 07:30
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 {@Testpublic 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
class com.lovo.Cat
测试类2
public class T {@Testpublic 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
我是构造方法
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 0
- J2EE框架(二)Class
- Java开源 J2EE框架(二)
- J2EE之反射中的class类(二)
- J2EE框架。。。
- J2EE框架
- J2EE框架
- J2ee 框架
- 基于J2EE轻量级容器构件框架二、总体介绍
- J2EE开发---验证码(二)----kaptcha框架
- J2EE进阶(十一)SSH框架整合常见问题汇总(二)
- J2EE Startup Class Error
- J2EE study(二)-----J2EE Components
- Java 字节码操控框架ASM(二):Parsing class
- J2EE框架Jar包说明及各框架下的Jar包依赖关系(二)
- J2EE开发框架发展史
- 开源J2EE框架Appfuse
- Java开源 J2EE框架
- Java开源J2EE框架
- Failed to load E:\SDK\android-sdk-windows\build-tools\27.0.2\lib\dx.jar如何简单解决
- Android自定义加载等待Dialog弹窗控件(仿ios效果实现)
- 销售组织与工厂对照表
- Android Drawable 详解
- java 并发包 -synchronized
- J2EE框架(二)Class
- 安装rpm时报错:Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY error: Failed dependencies:
- Dynamics CRM 执行ImportSolutionRequest导入解决方案报十六进制值是无效的字符的问题
- poco linux安装
- css
- Golang channel select用法
- STUN和TURN技术浅析
- Microsoft Visio 控件Aspose.Diagram 12月新版17.12发布 | 附下载
- 例7.13 有一个3*4的矩阵,求所有元素中的最大值。