手动编译含package的java源程序(包含外部包中定义的类)
1)定义一个GSM类,如下:
包名是“SRC.GSM”,并且此程序引用了外部jar包。使用javac命令对GSM.java进行编译:
GSM.java所在的文件夹如下所示:
切换到这个目录为当前工作目录,使用javac编译(http://www.cnblogs.com/Yogurshine/p/3170554.html):
使用-classpath参数指明外部类的路径(-classpath参数后没有”=“),以使import语句找到类的定义,-d参数是表示直接生成包的结构(就是创建SRC/GSM/GSM.class),其后的"."表示生成的包的结构就存储到本工作目录下,因此最终的结果如下:
最终在工作目录下生成了SRC/GSM/GSM.class。上述如果不使用-d参数的话,就只是直接生成GSM.class文件。
接下来就是对gauss.java进行编译,不过gauss这个类调用了GSM这个类,所以要先编译GSM这个类之后才能编译gauss类,不过没有成功,如下所示:
提示找不到GSM所在的包“LZ.SRC.a”(修改了GSM的源码,package后的一个字符串就是包名,也就是各个文件夹的名字),原因就在于我们在设置了“-classpath”,这里只是临时修改了编译器编译类时所需要的类的路劲(在计算机中配置的classpath这时暂时被覆盖),因此在编译gauss类的时候就只在“lib\jmatio.jar”中查找GSM.class所在的包,明显找不到嘛。因此需要再给-classpath一个配置值,就是".",当前目录。这样在“lib\jmatio.jar”中找不到GSM.class,就会在当前目录找,编译成功,如下:
Windows下使用javac命令,有多个jar包时多个jar包的路径以“;”分割开
而与Windows不同的是,Linux下多个jar包以“:”分隔开。
虽然有个警告,但是编译成功了(警告出现的原因是使用Arraylist泛型创建对象的时候,未指明具体类型 ArrayList a=new ArrayList()。正确的范方式是:ArrayList<Integer> a=new ArrayList<Integer>())。以上就完成了包含外部包的类的编译。
最后,如果两个类存放在同一个包中,那么不用使用import语句就可以直接使用类定义对象(例如在一个java文件中定义若干类,那么这些类中不是有import语句就可以直接互相使用,但是只允许有一个public类),另外,即使是在多个java文件中定义多个类,并且在第一行(包定义必须写在首行)没有定义package,在这些java文件中还是可以直接使用外部类而不用import语句,原因就是虽然没有写package语句,但是IDE编译的时候加上了package语句,并且是这些java文件是相同的package。
2)java提高了一种压缩机制,就是把大量的class文件打包成一个压缩文件,这个压缩文件就称为jar包。使用jar命令生成jar包;
lz.jar是生成的jar包的名称,而之后的“LZ”是待打包的包结构,是之前编译生成的GSM.class(LZ/SRC/a/GSM.class)和gauss.class(LZ/SRC/b/GSM.class)。jar包可是使用常用的解压软件打开,结构如下:
使用以下命令运行jar包:
java -jar lz.jar
不过,你发现这是不行的,提示“lz.jar”中没有主清单属性,这就要修改MANIFEST.MF的内容了,设置主类,不过,我还是没弄成。
手动编译含package的java源程序(包含外部包中定义的类)的更多相关文章
- java反射查看jar包中所有的类名方法名
不反编译,不用其他工具,用java反射查看jar包中所有的类名方法名,网上很多都报错,下面这个你试试看:话不多说直接撸代码: import java.lang.reflect.Field; impor ...
- 黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类
---------- android培训.java培训.期待与您交流! ---------- 一.File类 (一)概述 1.File类:文件和目录路径名的抽象表现形式 2.作用: (1)用来将文件或 ...
- 1.java.io包中定义了多个流类型来实现输入和输出功能,
1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(C),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(G) A.输入流和输出流 B ...
- java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing
java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...
- Java 访问限制符 在同一包中或在不同包中:使用类创建对象的权限 & 对象访问成员变量与方法的权限 & 继承的权限 & 深入理解protected权限
一.实例成员与类成员 1. 当类的字节码被加载到内存, 类中类变量.类方法即被分配了相应内存空间.入口地址(所有对象共享). 2. 当该类创建对象后,类中实例变量被分配内存(不同对象的实例变量互不相同 ...
- int是java.lang包中可用的类的名称
int是java.lang包中可用的类的名称(x) int为基本数据类型,不是类
- 24.Java中atomic包中的原子操作类总结
1. 原子操作类介绍 在并发编程中很容易出现并发安全的问题,有一个很简单的例子就是多线程更新变量i=1,比如多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Synchr ...
- Java中 util 包 Calendar类制作万年历(不用自己写方法,直接用Java写好的包中的类的方法)
代码前需要了解的关于Calendar类的内容: 1.在util包中,首先要知道Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象.Calendar 的 ...
- java -cp 执行jar包里的某个类
当我们需要测试某个功能时,需要在linux环境下执行某个类的main方法来测试 可以使用java -cp xxx.jar com.MyClass来执行某个类 java -cp test.jar:lib ...
随机推荐
- Oracle查询字段内容为非数字的记录
今天在一张3W多记录的表里查非数字的异常数据~数据库太水,记录一发,因为2.5使用人员误输入为2..5.... select t.routecardlist_id,trim(translate(RTR ...
- 一串跟随鼠标的DIV
div跟随鼠标移动的函数: <!DOCTYPE HTML><html><head> <meta charset="utf-8"> & ...
- java实现ssm框架的crud
上一篇博客写了通过表名获取数据库表结构的demo,现在我以此为基础实现了一个简单的通过数据库表结构生成对应的实体,通过读取mapper接口文件.mapping映射文件. service映射文件模板,替 ...
- HTML5学习之新增标签
转自:http://www.cnblogs.com/fly_dragon/archive/2012/05/25/2516142.html 作者:FlyDragon 一.引言 在本节中,笔者将向大家讲述 ...
- django中管理程序2
升级版 from os import path TASKS_ROOT = path.dirname(path.abspath(path.dirname(__file__))) PYTHON_ROOT ...
- 输入子系统--event层分析【转】
转自:http://blog.csdn.net/beyondioi/article/details/9186723 ########################################## ...
- 关于oracle的连接时ORA-12519错误的解决方案
系统在运行时出现了ORA-12519的错误,无法连接数据库,后来在网上找了下,找到了如下的解决方法,共享下. OERR: ORA-12519 TNS:no appropriate service ha ...
- 推荐下载App,如果本地安装则直接打开本地App(Android/IOS)
推荐下载App,如果本地安装则直接打开本地App(Android/IOS) - 纵观现在每家移动网站,打开首页的时候,都有各种各样的形式来提示你下载自身的移动App(Android/IOS),这是做移 ...
- BZOJ 1207
1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3089 Solved: 1499[Submit][Statu ...
- 【C++】隐式类型转换和 explicit关键字
来自:黄邦勇帅 1. 当类中带有一个参数的构造函数时,将执形对象的隐式转换,比如有类 A,有一个带有一个参数的构造函数A(int i){}则当出现语句A m=1;就会调用带有一个参数的构造函数来创建对 ...