java基础之包
包(package)
>>对文件进行分类管理
>>给类提供多层命名空间
>>写在程序文件的第一行
>>包类的全程 包名.类名
>>包也是一种封装形式
——————————————————————————————————————
1.名字必须要是全小写
2.包必须在第一行
自动生成包
>>.代表是当前目录命令
>>javac -d . 类名
java 包名.类名
存放在其他地方下的包目录 (包的出现,可以将类文件class文件和程序文件.java)
>> java -d c:\myclass 类名
>> set classpath=c:\myclass
>>java 包名.类名
——————————————————————————————————————
总结
>>不同包中的包之间进行访问,被访问的包中的类以及类中的成员(方法),需要public修饰
packsge pack;
public class PackDemo{
public static void main(String args[]){
packa.DemoA a=new packa.DemonA();
a.show();
}
}
**************************************************************************************
package packa;
public class DemoA{
public static void main(String args[]){
public void show(){System.out.print("DemoA runing );}
}
}
_______________________________________________________________________________________
包的结构图
>>c:\myclass\pack\PackDemo.class
>>c:\myclass\packa\DemoA.class
包树状流程图
|--myclass
|--pack
|--PackDemo.class
|--packa
|--DemoA.class
编译流程
set classpath=c:\myclass
javac -d c:\myclass DemoA.java
javac -d c:\myclass PackDemo.java
java pack.PackDemo
编译结果:
DemoA runing
__________________________________________________________________________________________
包与包之间可能会发生的错误由以下几个原因:
1.发生软件包不存在的情况
如:在myclass包中找不到packa包,这时候我们需要设置临时的classpath
>>set classpath=c:\myclass
包树状流程图
|--myclass
|--pack
|--PackDemo.class
|--packa
|--DemoA.class
_____________________________________________________________________________________________
2.类以类之间采用默认的权限protected,导致不同的包里的被访问的类以及其成员(例如show())不能进行访问(这里使用不同的包时候要用import关键字导入相应的包)
class PackDemo
class DemoA
show()
在进行编译PackDemo的时候,
会产生找不到符号
符号 :类 DemoA
位置 :类 pack.DemoA
错误的原因是:类名写错了,应该采取包名.类名的形式(这里也可以是以使用import关键字导入相应的包名,这样就可以不用写包名.类名的形式)
在PackDemo创建的DemoA不再同一个包中,这时候,我们就要用包.类名的方式(这个也说明了包具有封装数据的特性)
_______________________________________________________________________________________________________________________
>>不同的包中的子类可以访问父类中被protected权限修饰的成员
说明:如我们的例子,代码如下,我们可以看到DemoA 继承了DemoB,在PackDemo调用DemoA时候,因为DemoA继承于DemoB
packsge pack;
public class PackDemo{
public static void main(String args[]){
packa.DemoA a=new packa.DemonA();
a.show();
}
}
package packa;
public class DemoA enxtends DemoB{
public static void main(String args[]){
public void show(){System.out.print("DemoA runing );}
method();
}
}
package packb
public class DemoB{
public static void main(String args[]
public void method(){System.out.print(("DemoB runing");}
}
}
包的结构图
>>c:\myclass\pack\PackDemo.class
>>c:\myclass\packa\DemoA.class
>>c:\myclass\packb\DemoB.class
包树状流程图
|--myclass
|--pack
|--PackDemo.class
|--packa
|--DemoA.class
|--packb
|--DemoB.class
编译流程
set classpath=c:\myclass
javac -d c:\myclass DemoA.java
javac -d c:\myclass DemoB.java
javac -d c:\myclass PackDemo.java
java pack.PackDemo
编译结果:
DemoA runing
DemoB runing
______________________________________________________________________________________________________________________