我有2个包p1和p2,p2中的一些类有调用p1中类的全局变量,然后我在p2中用javac *.java编译,但是提示那些p1包中设的变量没有找到,是怎么回事?
如下:
OtherPackage.java:7: 软件包 p1 不存在
                p1.Protection p=new p1.Protection();
                                      ^
OtherPackage.java:18: 找不到符号
符号: 变量 n_pub
位置: 类 p2.OtherPackage
                System.out.println("n_pub= "+n_pub);
                                             ^
Protection2.java:15: 找不到符号
符号: 变量 n_pro
位置: 类 p2.Protection2
                System.out.println("n_pro= "+n_pro);
                                             ^
Protection2.java:16: 找不到符号
符号: 变量 n_pub
位置: 类 p2.Protection2
                System.out.println("n_pub= "+n_pub);

解决方案 »

  1.   

    javac -cp p1目录的父目录 *.java
      

  2.   

    目录结构就是p1下面有1个源文件,p2下面有3个源文件。主要就是为了实现各种不同变量他的作用域范围。是pdf文档上的一个习题。分别为:
    Protection.java文件
    package p1;public class Protection
    {
    int n=1;
    private int n_pri=2;
    protected int n_pro=3;
    public int n_pub=4;

    public Protection()
    {
    System.out.println("base constructor");
    System.out.println("n= "+n);
    System.out.println("n_pri= "+n_pri);
    System.out.println("n+pro= "+n_pro);
    System.out.println("n_pub= "+n_pub);
    }
    }
    Portection2.java文件
    package p2;class Protection2 extends p1.Portection
    {
    Protection2()
    {
    System.out.println("derived other package constructor");

    // class or package only
    // System.out.println("n= "+n);

    // class only
    // System.out.println("n_pri= "+n_pri);

    System.out.println("n_pro= "+n_pro);
    System.out.println("n_pub= "+n_pub);
    }
    }
    OtherPackage.java文件
    package p2;class OtherPackage
    {
    OtherPackage()
    {
    p1.Protection p=new p1.Protection();
    System.out.println("other package constructor");

    // class or package only
    // System.out.println("n= "+n);

    // class only
    // System.out.println("n_pri= "+n_pri);

    // class, subclass or package only
    // System.out.println("n_pro= "+n_pro);
    System.out.println("n_pub= "+n_pub);
    }
    }
    Demo.java文件
    // Demo Package p2.
    package p2;
    // Instantiate the various classes in p2.
    public class Demo
    {
    public static void main(String args[])
    {
    Protection2 ob1=new Protection2();
    OtherPackage ob2=new OtherPackage();
    }
    }
      

  3.   

    我的2个包在这个路径下,E:\zhbl\workspace\10,那具体要怎么写。谢谢
      

  4.   

    cmd 进入p2目录javac -cp E:\zhbl\workspace\10\ *.java
      

  5.   

    javac -cp E:\zhbl\workspace\10\ *.java
      

  6.   

    有没有办法,不用-cp参数,直接javac *.java可以吗?