一、包
1.package
javac A.java // 将在当前目录下生成A.class
能否把这些class文件存放于其他目录呢?
包实际上就是个文件夹可以包含多级子目录
格式:package 包名称.子包名称;
例子:package a.b.c.d;
javac -d < dir> <file.java> (表示在< dir>目录下生成包)
java 包名称.子包名称.类名称
解决类的同名冲突问题
package a.b.c.d;
public class Test { //必须大写和文件名一致
public static void main(String args[]){
System.out.println("hello world");
}
}
2.import
- 使用不同包的类时需要import
格式:
import 包名称.子包名称.类名称; // 手工导入某个类
import 包名称.子包名称.* ; // 由JVM自动加载所需要的类
package a.b.c.ls;
public class Math { //必须大写和文件名一致
public static int add(int a,int b){ //static 表示类方法
return a + b + 2;
}
}
package a.b.c.zs;
public class Math { //必须大写和文件名一致
public static int add(int a,int b){ //static 表示类方法
return a + b;
}
}
import a.b.c.ls.*;
import a.b.c.zs.*;
public class Test { //必须大写和文件名一致
public static void main(String args[]){
System.out.println(a.b.c.ls.Math.add(1,2));
System.out.println(a.b.c.zs.Math.add(1,2));
}
}
结果:
- 如果没有同名包,调用时不用加包
3.jar
-
生成:jar -cvf <file.jar> < dir>
-
查看:jar -tvf <file.jar>
-
解压:tar -xvf <file.jar>
4.CLASSPATH
作用:
指定编译时查找源码的目录
指定运行时查找的“.class文件的目录”或“jar文件”
设置方法:
export CLASSPATH=< dir1>:< dir2>:…:<file1.jar>:<file2.jar>:…
- 将a目录打包为my,jar ,然后将a目录删除,再执行找不到包了
c 创建指定文件 v 查看输出信息 f 指定文件名字 - 我们将a目录和编译生成的class文件都打包成了my.java,需要设置 CLASSPATH 指定查找class或jar的位置
表示在当前目录和my.jar中查找
二、权限
两个层次,一个是类,一个是类成员
类
- public class可以被外包访问
- class只能在本包中访问
package a;
public class Math { //必须大写和文件名一致
public static int add(int a,int b){ //static 表示类方法
return a + b;
}
}
Math为public权限,可以被外包访问
package a;
class Math { //必须大写和文件名一致
public static int add(int a,int b){ //static 表示类方法
return a + b;
}
}
Math方法只能被同包a内访问
类成员
包括属性和方法
private
default
protected
public
权限依次增大