当前位置: 技术问答>java相关
包的迷惑
来源: 互联网 发布时间:2015-07-12
本文导语: 第一次接触包的概念: package p1; class Demo1 { public int a; public void method() { System.out.println("demo1"); } } //---------------------------------- package p1; class Demo2 { public static void main(String args[]) { ...
第一次接触包的概念:
package p1;
class Demo1
{
public int a;
public void method()
{
System.out.println("demo1");
}
}
//----------------------------------
package p1;
class Demo2
{
public static void main(String args[])
{
Demo1 aDemo1 = new Demo1();
aDemo1.method();
aDemo1.a = 10;
int a = aDemo1.a;
System.out.println("Demo1 中的公共成员变量 a 的值:"+a);
}
}
我所理解的包的意思:我把Demo1.java和 Demo2.java都放在p1文件夹里。
但这么编译Demo2.java是通不过的。程序本身没有问题,因为我把这2个文件放到一起(不要包)运行很正常的。
有谁来给我讲讲包的概念?谢谢。
package p1;
class Demo1
{
public int a;
public void method()
{
System.out.println("demo1");
}
}
//----------------------------------
package p1;
class Demo2
{
public static void main(String args[])
{
Demo1 aDemo1 = new Demo1();
aDemo1.method();
aDemo1.a = 10;
int a = aDemo1.a;
System.out.println("Demo1 中的公共成员变量 a 的值:"+a);
}
}
我所理解的包的意思:我把Demo1.java和 Demo2.java都放在p1文件夹里。
但这么编译Demo2.java是通不过的。程序本身没有问题,因为我把这2个文件放到一起(不要包)运行很正常的。
有谁来给我讲讲包的概念?谢谢。
|
以我的理解:包应该是java类文件的一种组织方式,就像文件的目录路径一样。不同的包可以有相同名字的类,但可以在前面加上包名区分它们。许多公司自己开发的类文件一般放在以自己公司的ip地址为名称的包下,以保证类能被唯一正确的调用,如com.ibm.xxx.xxx包。其实说穿了,包就是一个名字前缀而已。
你的问题是可能你的类路径设置不正确,应该加上一个“.”,如:"classpath=.;c:jdk;...",那么编译器在找类的时候就会在本目录下寻找,这样才能找到你说的Demo1类。
你的问题是可能你的类路径设置不正确,应该加上一个“.”,如:"classpath=.;c:jdk;...",那么编译器在找类的时候就会在本目录下寻找,这样才能找到你说的Demo1类。
|
其实包就是相当于一个名字空间,好比文件系统的意思,这样同名的文件
就可以放在不同的目录中,避免了同名的问题!
所以你可以把包想象一个目录,
用的例子说明,比如你编译demo1.java时,会在当前目录生成一个子目录
p1,在该目录中有demo1.class文件,所以当你在和demo1.java相同的目录下
编译demo2.java,由于你用到了demo1.class,所以你必须引用这个包,
即import p1.*;
就可以放在不同的目录中,避免了同名的问题!
所以你可以把包想象一个目录,
用的例子说明,比如你编译demo1.java时,会在当前目录生成一个子目录
p1,在该目录中有demo1.class文件,所以当你在和demo1.java相同的目录下
编译demo2.java,由于你用到了demo1.class,所以你必须引用这个包,
即import p1.*;
|
朋友,你没什么事吧。我试了没有错,能正常编译。
PACKAGE不是说要把Demo1.java和 Demo2.java都放在p1文件夹里PACKAGE指的是在编译后的。CLASS文件所放的地方,运行时它会到你的CLASSPATH或你写的PACKAGE中去找你的DEMO1。CLASS。所你你把编译后的。CLASS放到一起没问题
PACKAGE不是说要把Demo1.java和 Demo2.java都放在p1文件夹里PACKAGE指的是在编译后的。CLASS文件所放的地方,运行时它会到你的CLASSPATH或你写的PACKAGE中去找你的DEMO1。CLASS。所你你把编译后的。CLASS放到一起没问题
|
package p1;
public class Demo1
{
public int a;
public void method()
{
System.out.println("demo1");
}
}
我认为问题出在类的声明前没有加public修饰符,所以这个类不能被另一个包里的类引用。
public class Demo1
{
public int a;
public void method()
{
System.out.println("demo1");
}
}
我认为问题出在类的声明前没有加public修饰符,所以这个类不能被另一个包里的类引用。
|
就是放在p1里去,
|
刚才忘了一点,你的p1目录要放在类路径下,编译器的寻找方式是先获得Demo2的包为p1,那么它就会找所有类路径下的Demo1类,如果类路径中有"."的话,他就会找所有类路径中所有含有p1的包下面的类,直到找到Demo1类。
|
编译通不过吗??
这样编译:
假设两个文件都在d:
D;javac -d . Demo1.java
D:javac -d . Demo2.java
这样运行:
d:java pl.Demo1
d:java pl.Demo2
这样编译:
假设两个文件都在d:
D;javac -d . Demo1.java
D:javac -d . Demo2.java
这样运行:
d:java pl.Demo1
d:java pl.Demo2
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。