10.面向对象――包
10.1包的作用
包在windows中就是指文件夹,包能够对Java中的类文件进行管理,同时能提供多层的命名空间,也是一种封装形式.
将Java的类文件,存放到指定的包中,可以存放在一个包中,也可以存放在多层包中,使用关键字package,必须写在第一行.
如:package 包名;
这里的包可以有多个,多个包时,用“.”点分隔,形成多层的包。最底层包存放类文件。
如:package packa.packb.packc;最底层包packc存放的类文件。
如果在代码中定义了包,需要在编译是加上参数,才能生成包目录。
格式:javac –d (指定存放包的目录,“.”代表当前目录) 源文件名.java
生成包后,如果想运行类文件,必须指定类文件所在的一级级的包目录,用“.”点分隔。
格式:java packa.packb.packc.类文件名
如果,直接去最底层包packc中运行的话,会报错,NoClassDefFoundError找不到类文件。
如:
package mypack.pack.packa;//定义类文件存放的包。
public class Demo
{
public static void main(String[]args){
System.out.println("Hello world");
}
}
/*
编译:
javac –d . Demo.java 存放在当前目录。
运行:
java mypack.pack.packa.Demo
打印结果:Hello world
*/
注意:不同的包之间互访,包中的类必须是public,被访问的类的方法,也必须是public的。
不同的包之间是可以继承的,前提是权限的问题。
权限名 | public | protected | 默认权限 | private |
同一类中 | √ | √ | √ | √ |
同一包的不同类中 | √ | √ | √ |
|
不同包的子类中 | √ | √ |
|
|
不同包中 | √ |
|
|
|
10.3包的导入
Java的核心包java.lang包中的内容,jdk1.2后是默认自动导入的,但是如果在当前包中的程序,使用了其他包中的类,就需要手动导入.
使用关键字:import
导包格式:import 包名.包名...类名;
如果想导入包下所有的类:import 包名.包名...*;
如果一个类中,所有的成员都是静态的,可以使用静态导入,这些在调用时,直接写成员名,不用再写类名.成员.
如:import static 包名.包名......类名.*;
调用时,直接写成员名就可以了.
10.2 jar包
java中的jar包,类似于windows中的压缩包,如:zip,rar.
jar工具的好处,就是可以将多个包目录,进行打包为jar包.
格式:
jar cvf 指定包名.jar 指定被压缩的目录1 指定被压缩的目录2….
当存放有字节码文件的包目录被打成jar包后,不需要解压只需要将classpath设置成jar包所在路径就可以了,可以直接运行,这是jar包的好处.
如:
G:\>set classpath
classpath=g:\j.jar
G:\>java packa.packb.packc.Demo
Hello world
当然,也可以使用jar命令对jar包进行解压
格式:jar xvf 被解压包名