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源程序(包含外部包中定义的类)的更多相关文章

  1. java反射查看jar包中所有的类名方法名

    不反编译,不用其他工具,用java反射查看jar包中所有的类名方法名,网上很多都报错,下面这个你试试看:话不多说直接撸代码: import java.lang.reflect.Field; impor ...

  2. 黑马程序员——【Java基础】——File类、Properties集合、IO包中的其他类

    ---------- android培训.java培训.期待与您交流! ---------- 一.File类 (一)概述 1.File类:文件和目录路径名的抽象表现形式 2.作用: (1)用来将文件或 ...

  3. 1.java.io包中定义了多个流类型来实现输入和输出功能,

    1.java.io包中定义了多个流类型来实现输入和输出功能,可以从不同的角度对其进行分 类,按功能分为:(C),如果为读取的内容进行处理后再输出,需要使用下列哪种流?(G)   A.输入流和输出流 B ...

  4. java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing

    java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...

  5. Java 访问限制符 在同一包中或在不同包中:使用类创建对象的权限 & 对象访问成员变量与方法的权限 & 继承的权限 & 深入理解protected权限

    一.实例成员与类成员 1. 当类的字节码被加载到内存, 类中类变量.类方法即被分配了相应内存空间.入口地址(所有对象共享). 2. 当该类创建对象后,类中实例变量被分配内存(不同对象的实例变量互不相同 ...

  6. int是java.lang包中可用的类的名称

    int是java.lang包中可用的类的名称(x) int为基本数据类型,不是类

  7. 24.Java中atomic包中的原子操作类总结

    1. 原子操作类介绍 在并发编程中很容易出现并发安全的问题,有一个很简单的例子就是多线程更新变量i=1,比如多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Synchr ...

  8. Java中 util 包 Calendar类制作万年历(不用自己写方法,直接用Java写好的包中的类的方法)

    代码前需要了解的关于Calendar类的内容:      1.在util包中,首先要知道Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象.Calendar 的 ...

  9. java -cp 执行jar包里的某个类

    当我们需要测试某个功能时,需要在linux环境下执行某个类的main方法来测试 可以使用java -cp xxx.jar com.MyClass来执行某个类 java -cp test.jar:lib ...

随机推荐

  1. oralce的客户端sqlplus

    安装完oracle后,默认的客户端是sqlplus,还有一个公司常用的是PLSQLdeveloper 客户端软件,另外Navicat primie这个可以连接mysql.sqlserver.oracl ...

  2. Patch Windows with SSM on AWS

    ec2ssmupdate https://docs.amazonaws.cn/systems-manager/latest/userguide/systems-manager-patch.htmlht ...

  3. php设定错误和异常处理可使用的函数

    1.register_shutdown_function 使用场景:当我们的脚本执行完成或意外死掉导致PHP执行即将关闭时,这个函数会被调用. 函数介绍: void register_shutdown ...

  4. C#网络编程基本字段---IPAddress、IPEndPoint

    命名空间: using System.Net; PAddress类提供了对IP地址的转换.处理等功能.其Parse方法可将IP地址字符串转换为IPAddress实例. 如:IPAddress ip = ...

  5. C++中的垃圾回收和内存管理

    最开始的时候看到了许式伟的内存管理变革系列,看到性能测试结果的时候,觉得这个实现很不错,没有深入研究其实现.现在想把这个用到自己的一个项目中来,在linux下编译存在一些问题,所以打算深入研究一下. ...

  6. 【HDU5772】String Problem [网络流]

    String Problem Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description Input Ou ...

  7. codefoeces 671 problem D

    D. Roads in Yusland standard output Mayor of Yusland just won the lottery and decided to spent money ...

  8. 51nod K 汽油补给 大根堆+小根堆....

    题目传送门 用优先队列瞎搞... 想着在每个地方 先算上一个点到这一个点要花费多少钱 这个用小根堆算就好 然后在这个地方加油 把油钱比自己多的替代掉 这个用大根堆维护一下 然后两个堆之间信息要保持互通 ...

  9. [POJ3237]Tree解题报告|树链剖分|边剖

    关于边剖 之前做的大多是点剖,其实转换到边剖非常简单. 我的做法是每个点的点权记录其到父亲节点的边的边权. 只要solve的时候不要把最上面的点记录在内就可以了. Tree Description Y ...

  10. HoneyPy 模拟Nginx服务器脚本

    HoneyPy是一个Python写的低交互式蜜罐,可以通过自定义Plugins的方式来配置不同的场景.这里是一个模拟Nginx空白页面的代码: # Auth xiaoxiaoleo # http:// ...