"package中的javac,java用法" && "制作可执行jar文件"
java初学者最早会用的命令无非是就是javac和java,但即使这么简单命令也还会把我们弄得头皮发麻 -__- .Roger下面就"package中的javac,java用法"和"制作可执行jar文件"做点简单的解释。
最基础的东西就不废话了,至于package先讲讲我的理解,因为我觉得知道这点对于开发还是很有帮助的。举个例子说:有两个类Tom和Jerry同属于一个package--Partners
//Tom.javapackage Partners;public class Tom{ public String toString() { return "It@#s Tom"; }}
//Jerry.javapackage Partners;public class Jerry{ public static void main(String[] args) { tom = new Tom(); System.out.println(tom + " and I am Jerry."); }}
下面Roger要编译它们为字节码了,@_@,可用如下命令:Tom先,这很明显,而且必须:javac Tom.java 或 javac -d .\Partners Tom.java
(这里应该先设好path,如Roger机子上就是C:\j2sdk1.4.2\bin,因为javac.exe和java.exe都在这个目录下,它们可是javac和java的源泉;同理classpath也要设好了,Roger的机子上是.,C:\j2sdk1.4.2\lib\dt.jar和C:\j2sdk1.4.2\lib\tools.jar...,tools.jar是jar命令的源泉,不过除了.,其他两个都是默认的,不设也行;如果有其他的东东也要设上去,如机子上装了tomcat就应该加上Tomcat 5.0\common\lib下的jar文件,反正第三方类库都加上去,以便jvm找到着.如果用eclipse就要在eclipse里也设一下tomcat,这个以后在说吧.)
这两条命令的区别在于后者执行完后在当前目录下生成一个Partners文件夹,里面有生成的Tom.class. -d 表示指定在哪个目录下生成class文件,即使写一长窜嵌套的之前没有的目录,命令执行完之后也会生成的,这点不用担心的。至于前者执行完之后,还要人工创建一个Partners文件夹,并把Tom.class移进去。为什么一定要这个Partners文件夹呢?这就看你对package的理解了。我们知道这里Tom的全称是Partners.Tom,而jvm在处理它时把它转化为Partners\Tom或Partners/Tom(看不同的system了)。当你要运行它时,就应该在Partners文件夹上一层目录用以下命令:java Partners.Tom。(在Partners目录下用这个命令不行的:java Tom,不然会出现一个error说类名找不到,只有Partners\Tom这个类名)于是jvm会循着这个线索对目录层层解析才能找到Tom.class并执行它.如果你的package更长点也一样,比如:com.blogdriver.bubbletea, 不信就试试吧.Jerry也是一样的道理.所有工作结束之后,我们有以下目录结构:
.--Partners --Tom.class --Jerry.class
看到这里肯定有老兄会说为什么要这么复杂,干脆不要用package算了。package还是有很多好处的,主要是使类之间的访问有了限制,便于控制和管理。举个例子,在develop和production版本之间进行控制就很有好处了,当然如果你用eclipse之类的IDE的话,就用不着上面这么复杂了,按下Run按钮就行了。
下面要把它们打成可执行的jar文件.先自己动手创建一个.mf文件,里面写"Main-Class: Partners.Jerry\n",之后的目录结构如下:.--Partners --Tom.class --Jerry.class--MANIFEST.mf
MANIFEST相当于一个货单,里面存了诸如执行的主类是哪个等信息,取其他名字也行。
然后运行下面命令: jar cvfm test.jar MANIFEST.mf Partners(至于cvfm是什么就看这个吧:jar -help,help很有用的啊)这其实是个压缩的过程.之后就生成可执行的jar文件了,如果是applet之类的文件双击即可执行,而本例双击之后结果很快显现并消失了,正常的人眼估计是看不到了,就用下面命令吧:java -jar test.jar.看到结果了吧.下面Roger再给一个applet的例子,按照上面步骤弄一下,双击jar文件就可以看到很明显的结果了.
import javax.swing.*;import java.awt.*;public class myApplet extends JApplet { public void init() { getContentPane().add(new JLabel("Applet!")); } public static void main(String[] args) { JApplet applet = new myApplet(); JFrame frame = new JFrame("Applet"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(applet); frame.setSize(100,50); applet.init(); applet.start(); frame.setVisible(true); }}
命令如下:javac myapplet.javajar cvfm test2.jar ANOTHERMF.mf myApplet.class
注意这样做一定要有main函数,有的applet没有的就自己加一个吧,跟上面的例子差不多,主要是JApplet.init()和JApplet.start()方法.jar的其他用法就不用Roger说了吧,自己用-help看看就知道了.
下一篇:Struts心得—DispatchAction使用日记 >>
相关文章:
- · [Eclipse笔记]作为Java IDE的Eclipse有多流行?看看今年TheServerSide的Java研讨会上做的一个调查。
- · J2SE 5.0的新特性---Autoboxing
- · 如何在windows NT 下安装jboss为服务?(How to install jboss as Windows NT OS Service?)
- · What is SOA?----------对SOA的思考,以及由此想到的人类社会的发展
- · 介绍一些 Java NIO 的学习文章,以方便各位的学习!
- · 《java深度历险》读书笔记(一)
- · Velocity A template engine OR A Rule engine OR Both
- · 2005 JDJ Readers Choice Awards - Best Java Book Nominees:
- · javascript事件查询综合
- · 让我感觉很爽的CachedRowSet
- · java日记:学习java一年体会3
- · [原创] Eclipse 3.1M5a中创建RCP程序
- · Oracle & JSP 开发的小型信息管理系统 (五) 源代码4
- · Oracle & JSP 开发的小型信息管理系统 (四) 源代码3
- · Oracle & JSP 开发的小型信息管理系统 (三) 源代码2
- · Oracle & JSP 开发的小型信息管理系统 (二) 源代码1
- · Oracle & JSP 开发的小型信息管理系统 (一) 说明文档
- · 在Unix和Linux下安装JDK及环境设置
- · 读取foxpro格式的dbf文件
- · 什么是Extreme Programming(极限编程,简称XP)
- · 在struts中使用国际化(i18n)
- · 复杂类型javabean(数组成员)在jsp中的运用:在jsp页面间传递数组
- · 启动WebLogic后,不能进入控制台和应用的问题
- · Known Bugs in Tomcat 5 while using RMI
- · Annotations:hype or not?
- · Jsdk5.0中新增枚举enum类型使用例解
- · Java开源实践(1)--环境配置
- · 《Java 手机/PDA 程序设计入门》读书笔记8--LCDAUI低级API之 线程 时间控制
- · hibernate in 查询
- · Think in java Stream 经典
- · Eclipse启动时报错
- · 面向对象WEB开发框架:ECHO2 卷土重来
- · Spring+Struts+Hibernate入门例子Wiring Step By Step
- · scjp认证 我的拾零
- · 用OTA下载本机J2me程序至手机
- · ibm developer的一些对我有用的网址
- · eclipse 下用cdt插件开发c c++程序
- · java日记:学习java一年体会1
