一、
在路径~/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 即可,不需要添加别的参数