linux下含有package语句的java程序编译执行以及jar的使用、外部引用一个jar程序的编译和执行

一、

在路径~/java_study/java_code/pageTest 中有一个java文件:staticinit.java 代码如下:

package java2.java_code.pageTest;
class Bowl
{
 Bowl(int marker)
  {
 System.out.println("Bowl(" + marker + ")");
 }
 void f1()
  {
 System.out.println("Ok");
 }
 }

 class Cupboard
  {
 Bowl b1 = new Bowl(1);

 static Bowl b2 = new Bowl(2);

 Cupboard()
 {
 System.out.println("Cupboard()");
 }

 static Bowl b3 = new Bowl(3);
 }

 class Table
  {
 Table()
 {
 System.out.println("Table()");
 }
 Table(String a,int i){
 this();
 System.out.println("Ok");
 }
 }

 public class staticinit
 {
    
 static Cupboard t1 = new Cupboard();

 static Table t2;

 Bowl t3 = new Bowl(10);

 void print()
 {
 t3.f1();
 }

 public static void main(String[] args)
  {
     new Bowl(6);
 System.out.println("Creating new Cupboard() in main");
 new Cupboard();
 System.out.println("Creating new Cupboard() in main");
 //staticinit od = new staticinit();
 //od.t3.f1();
 Table t4 = new Table("aa",1);
 }
 }

终端的当前目录为~/java_study/java_code/pageTest

环境变量为:

CLASSPATH=".:/usr/lib/jdk_6u26/java-6-sun/lib"

使用命令:

javac -d . staticinit.java

会在当前目录下生成一个java2的目录,里面包含class文件

java java2.java_code.pageTest.staticinit

可执行此程序,终端上会看见一些输出

二、

修改staticinit.java的main函数为:

public static void main2()
  {
     new Bowl(6);
 System.out.println("Creating new Cupboard() in main");
 new Cupboard();
 System.out.println("Creating new Cupboard() in main");
 //staticinit od = new staticinit();
 //od.t3.f1();
 Table t4 = new Table("aa",1);
 }

保存,执行命令javac -d . staticinit.java

重新创建一个java文件:two.java,代码如下:

import java2.java_code.pageTest.*;
public class two
{
    public static void main(String[] args)
    {
        staticinit t = new staticinit();
        t.main2();
    }
}

在two中引用staticinit。

执行命令:javac two.java后会出现如下错误:

two.java:6: 无法访问 staticinit
错误的类文件: ./staticinit.java
文件不包含类 staticinit
请删除该文件或确保该文件位于正确的类路径子目录中。
        staticinit t = new staticinit();
        ^
1 错误
这是因为 staticinit.java文件存在的缘故,把staticinit删掉即可,重新执行命令javac two.java,正常

再执行命令:java two,终端会有输出

三、

接一、二步骤

执行命令:

jar cvf java2.jar java2/* 将java2打包成jar包

javac -cp java2.jar two.java 编译two

java -cp java2.jar:$CLASS_PATH two 执行two

当外部引用一个jar中,有一个较简单的方法,就是将该 jar 的路径加入CLASS_PATH中,剩下的操作就和普通的包没什么多大区别了:

import //引用一个包

完成后 javac、java 即可,不需要添加别的参数

 

你可能感兴趣的:(package)