Java

本类阅读TOP10

·使用MyEclipse开发Struts框架的Hello World!(录像1)
·hibernate配置笔记
·AOP编程入门--Java篇
·linux下Tomcat 5.0.20 与 Apache 2 安装/集成/配置
·在win2003下整合了整合Tomcat5.5+ apache_2.0.53+ mod_jk_2.0.47.dll
·构建Linux下IDE环境--Eclipse篇
·Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)
·ASP、JSP、PHP 三种技术比较
·Tomcat5.5.9的安装配置
·AWT GUI 设计笔记(二)

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
关于包Package信息的论述

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

包(Package)的信息存放在哪里? 文件夹的路径是否就代表包的路径? 文件夹的路径是创建和编译的时候根据包信息生成的,包的信息存放在class文件中 这里有个测试的例子 package mytest.test; public class test { public test() { System.out.print("hello "); } public static void main(String[] args) { test tObj = new test(); try { Class.forName("mytest.test.testa").newInstance(); } catch (ClassNotFoundException ex) { } catch (IllegalAccessException ex) { } catch (InstantiationException ex) { } } } 这里面的mytest.test.testa在工程创建时没有这个类 然后我编写了一个独立的java文件(用ultraEdit编辑) package mytest.test; public class testa { public testa() { System.out.print("\n\nhelloA"); } } } 编译成class文件放到\Mytest\classes\mytest\test文件夹下 运行后的结果是 hello helloA 就是说主程序找到了这个类 (如果在独立的java文件中没有包的声明,主程序就找不到这个类,这说明在class文件中有包的信息) 我在testa.java中的包是package mytest.testdir; testdir是不存在的一个文件夹,手动创建后,并把编译好的class文件放到该目录下。 主类也做相应修改 Class.forName("mytest.testdir.testa").newInstance(); 运行成功,testa类被装载成功。 得到的结果是 类装载的搜索是依据文件路径,然后依据.class里面的包信息,一切符合了才会加载成功 扩展开了讲 如果我定义一个接口,然后公布这个接口由我的客户或二次开发商来实现这个接口。 我在主程序中遍历\Mytest\classes\mytest\test目录下的class文件 获得文件名,然后根据这些文件名生成菜单,每个菜单对应一个。 处理菜单事件(动态),Class.forName("mytest.test.testa").newInstance();并转换成我们公布的接口,利用 接口调用里面的函数。 这个就实现了扩展程序的功能(类似游戏的外挂)。 以前知道可以通过dll来实现这个功能,现在也可以用java来实现了。 总结: 包的信息存放在.class文件中,装载时先依据文件路径,再确定.class文件中的包信息 可以通过此特性来创建程序的外挂。


相关文章

相关软件