概述
Java类包是Java管理类文件的一种机制,可以解决类名冲突的问题。
Java类包的特性:
1.对类文件进行分类管理
2.给类提供多层命名(名称)空间
3.写在程序文件的第一行
4.类名的全称是 包名.类名
5.包也是一种封装形式
使用不同包中的类常犯的错误:
1,类名写错:在不同的包中调用类时要明确其包的所属,正确格式是包名.类名
2,包不在当前目录,而是存放在其他目录下。应该配置一个classpath:
set classpath=包所在的父目录
3,权限不是公共的。访问不同包的类时,这个类的权限必须是public的,访问这个类的方法时,此方法的权限也必须是public的。
总结:包与包之间的类进行访问,被访问的包中的类必须是public的,被访问的包中的类的方法也必须是public的。
导入包
可以使用import在类中导入包,从而简化类名书写。当然也可以不导入包,直接写其他包中的类的全名。
导包的原则:用到哪个类,就导入哪个类,不建议使用通配符。
注意:若是包中还有子包,要导入子包中的类,得另外再导入。
下面举个例子综合介绍类包的知识:
package mypack;//也可以使用多级的包名mypack.javapack.
//import packa.DemoA;//导入了packa包中的DemoA类
import packa.*;//导入了packa包中所有的类,若是packa包中还有子包。得另外导入,因为这行代码只导入packa目录下的类
//import packa.abc.abc.*
class PackageDemo
{
public static void main(String[] args)
{
//packa.DemoA d=new packa.DemoA();
DemoA d=new DemoA();//import了packa之后,就可以简写类名了
d.show();
//packb.DemoB e=new packb.DemoB();
//e.method();//method方法被protected修饰,只能被不同包内的子类调用,其他类不能调用
System.out.println("hello package");
}
}
/*
javac -d c:\myclass DemoB.java
javac -d c:\myclass DemoA.java
javac -d c:\myclass PackageDemo.java
java mypack.PackageDemo
*/
package packa;
public class DemA extends packb.DemoB//继承不同包中的类
{
public void show()
{
method();//调用父类的方法
System.out.println("demoa show run");
}
}
package packb;
public class DemoB
{
protected void method()//protected的权限是不同包内的子类能使用,也是种封装形式
{
System.out.println("DemoB method run");
}
}
java语言中的权限修饰符:
访问包位置/类修饰符 | public | protected | default | private |
---|---|---|---|---|
同一类中 | 可见 | 可见 | 可见 | 可见 |
同一包中 | 可见 | 可见 | 可见 | 不可见 |
子类中 | 可见 | 可见 | 不可见 | 不可见 |
不同包中 | 可见 | 不可见 | 不可见 | 不可见 |
Jar包简介
jar包即java的压缩包。在jdk的bin目录下有一个jar.exe,可以对java文件进行压缩和解压缩等操作。
在DOS窗口输入jar 可以查看所有的功能;
常见的命令如下:
jar -cvf Demo.jar pack 将pack包压缩到Demo.jar这个压缩包中
jar -xvf Demo.jar 解压缩
jar -tvf Demo.jar 查看jar包里的内容
JAR文件是跨平台的,所以不必关心涉及具体平台的问题。要运行jar包里的类不需要解压缩,只需要把路径设置为这个类所在的jar包目录即可
set classpath=./Demo.jar
打 Java 包的时候可以有一个清单文件:MANIFEST.MF,它是打包的关键性文件,主要是设置执行入口类和支持库的路径,在运行Java 应用程序时会根据此文件中给出的信息来查找入口类和支持库。