预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共15页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

12、1Java类加载机制 ﻩ前面我们给大家介绍过JVM得功能(提供运行时环境、垃圾回收机制与提供中立得体系结构)。在提供运行时环境中有个子功能就是ClassLoader(类加载器),它主要用于将主类(即包含了main方法得类)加载到JVM得codesegment(代码区)。然后运行环境找到main方法(程序入口)开始执行程序.在整个程序运行得过程中,会有更多得class被动态Load到内存中。类加载机制如图12-1所示: 图12-1类加载机制 需要注意得就是:类并非一次性就全部加载完毕,而就是在需要得时候(运行期间)动态加载到内存。利用java-verbose:classTest可以观察类得具体加载过程。 12、2Java反射机制 什么就是反射 Java程序在运行期间可以动态加载、解析与使用一些在编译阶段并不确定得类型数据,这一机制被称为反射(Reflection).反射库(reflectionlibrary)提供了一个非常丰富且精心设计得工具类,以便编写能够动态操纵Java代码得程序。使用反射,在设计与运行中添加新类时,能够快速得应用开发工具动态得查询新添加类得能力。 反射方式 反射机制提供得功能 ·加载运行时才能确定得数据类型 ·解析类得结构、分析类得能力、获取其内部信息 ·操作类(进行实例化访问非静态成员,直接利用类名访问静态成员)或其实例(访问属性、调用方法、创建新对象) 12。2。1Class类 ﻩ在程序运行期间,Java运行时系统始终为所有得对象维护一个被称为运行时得类型标识,被称为Class(注意与class得区别)。通过Class可以完整得得到一个类中得完整结构,包括此类中得方法定义,属性定义等。Class就是反射得源头或入口,通过查瞧JDK帮助手册其常见方法如图: 12.2。2如何获取Class类对象 12.2.2、1针对引用数据类型 ·通过ClassLoader得loadClass方法 Classc1=ClassLoader、getSystemClassLoader()、loadClass(”、itjob、Person"); ·调用静态方法Class、forName() Class、forName(”、itjob、Person”); Class、forName(”oracle、jdbc、dirver、OracleDriver"); ·调用Object类中定义得getClass()方法 Personp=newPerson(); Classc1=p、getClass(); Classc2=”Hello"、getClass(); ·使用、class表达式 Classc1=String、class; Classc2=、itjob、Person、class; Classc3=oracle、jdbc、dirver、OracleDriver、class; 12。2.2、2针对基本数据类型及void ·使用、class表达式 Classc1=int、class; Classc2=double、class; Classc3=void、class; ·调用相应封装类得Type属性 Classc1=Integer、TYPE; Classc2=Double、TYPE; Classc3=Void、TYPE; ﻩ示例如下: try{ ﻩﻩﻩ//1、引用数据类型 ﻩ //1、1利用ClassLoader类得loaderClass(”类全名称”);手动加载,会有异常 System、out、println(ClassLoader、getSystemClassLoader()、loadClass("、itjob、Person")、getName()); ﻩ//1、2利用Class、forName(类全名称);手动加载,会有异常 ﻩﻩSystem、out、println(Class、forName(”、itjob、Person")、getName()); ﻩ //1、3调用Object类中定义得getClass()方法 ﻩ System、out、println(newPerson()、getClass()、getName()); ﻩ //1、4使用、class表达式 ﻩﻩ System、out、println(Person、class、getName()); ﻩ //2、基本数据类型与void ﻩﻩ//2、1使用、class表达式 ﻩﻩ System、out、println(int、class、getName()); ﻩ System、out、println(double、class、getName()); ﻩﻩﻩSystem、out、println(void、class、getName()); ﻩ //2、2通