- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《软件设计模式》讲义
3、反射与工厂模式
反射、工厂模式应用
教学重点
1. 软件设计原则中开闭原则、单一职责原则
2. 简单工厂设计模式
3. Java中的反射技术
4. 工厂设计模式
5. 抽象工厂设计模式
教学难点
1. 软件设计原则的理解
2. 设计模式的应用场景,设计模式使用后带来的优点,不用设计模式的缺点
3. 反射的作用,反射的用法
教学目标
1. 理解开闭原则
2. 理解单一职责
3. 掌握反射技术
4. 了解简单工厂设计模式、工厂设计模式及抽象工厂设计模式之间的区别
5. 理解创建型设计模式解决的问题类型
6. 完成老师的课堂实例
1、JAVA运行原理
? 教学时间: 5分钟
? 教学方法:PPT,回顾
这一节课我们准备对JAVA的反射机制进行研究,在此之前,先和大家讨论一下,什么是JAVA,你们了解JAVA到什么程度?对于JAVA的底层知识有没有一些觉得自己可以炫耀的。(讨论,举手)
下面我来问几个我想知道的问题,比较基础啊,看看有没有谁能够帮我解释的。
对象创建的流程分析,看PPT,编写代码,请学生回答问题
2、类的加载过程分析
? 教学时间: 5分钟
? 教学方法:PPT,回顾
1)类的加载过程
JVM将类加载过程分为三个步骤:装载(Load),链接(Link)和初始化(Initialize)链接又分为三个步骤,如下图所示:
(1) 装载:查找并加载类的二进制数据;
类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个这个类的java.lang.Class对象,用来封装类在方法区类的对象。
JVM的类加载是通过ClassLoader及其子类来完成的,类的层次关系和加载顺序可以由下图来描述:
? Bootstrap ClassLoader
负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class,由C++实现,不是ClassLoader子类
? Extension ClassLoader
负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包
? App ClassLoader
负责记载classpath中指定的jar包及目录中class
? Custom ClassLoader
属于应用程序根据自身需要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader
加载过程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。
类加载器的特点:
1、运行一个程序时,总是由AppClass Loader(系统类加载器)开始加载指定的类。
2、在加载类时,每个类加载器会将加载任务上交给其父,如果其父找不到,再由自己去加载。
3、Bootstrap Loader(启动类加载器)是最顶级的类加载器了,其父加载器为null.
类加载有三种方式:
1、命令行启动应用时候由JVM初始化加载
2、通过Class.forName()方法动态加载
3、通过ClassLoader.loadClass()方法动态加载
三种方式区别比较大,看个例子就明白了:
public class HelloWorld {
public static void main(String[] args) throws ClassNotFoundException {
ClassLoader loader = HelloWorld.class.getClassLoader();
System.out.println(loader);
//使用ClassLoader.loadClass()来加载类,不会执行初始化块
loader.loadClass(Test2);
//使用Class.forName()来加载类,默认会执行初始化块
// Class.forName(Test2);
//使用Class.forName()来加载类,并指定ClassLoader,初始化时不执行静态块
// Class.forName(Test2, false, loader);
}
}
您可能关注的文档
最近下载
- 儋州市雅星镇社区工作者考试试题2024.docx VIP
- 传感器与测试技术课程设计.docx VIP
- 包装危险货物运输模拟题.docx VIP
- (高清版)B-T 228.1-2021 金属材料 拉伸试验 第1部分:室温试验方法.pdf VIP
- 公司预算管理制度京东集团.docx VIP
- 2024福建南平武夷新区城市发展集团有限公司社会招聘26人笔试模拟试题及答案解析.docx VIP
- 论李碧华小说的饮食书写.docx VIP
- 幼儿园课件:大班社会语言活动《认识少数民族》.pptx VIP
- 小学教师(XXX) 师德师风档案模板.docx VIP
- (高清版)DB34∕T 3665-2020 规模猪场异位发酵床操作技术规程.pdf VIP
文档评论(0)