什么是package?
- 为了更好地组织类,Java提供了包机制。包是类的容器,用于分隔类名空间。如果没有指定包名,所有的示例都属于一个默认的无名包。
- Java中的包一般均包含相关的类,例如,所有关于交通工具的类都可以放到名为Transportation的包中。
- 程序中如果有package语句,该语句一定是源文件中的第一条可执行语句,它的前面只能有注释或空行。另外,一个文件中最多只能有一条package语句。
为什么要用package?
- 避免软件开发中的的命名冲突问题
怎么打包?
1.如何定义package?
//把类放入包中 package me.yanggan.Print; public class Test{ public static void main(String[] args){ System.out.println("Hello package!"); } }
2.包的命名规则
- (全体小写,由域名定义)
- Java包的名字都是由小写单词组成。但是由于Java面向对象编程的特征,每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会反复的,所以程序员一般采取自己在互联网上的域名称作为自己程序包的唯一前缀。 例如:net.frontfree.javagroup
3.如何编译标识包的类?
//可以直接编译 yg@yg-Ubuntu:~/Desktop/code$ javac Test.java
下图表示打包到目录后的编译后的类文件:yg@yg-Ubuntu:~/Desktop/code$ javac -d . Test.java //也可以带选项编译 -d 表示 Specify where to place generated class files(创建一个包目录) . 表示当前路径
4.如何运行编译好的类文件?
//直接用java Test 运行程序会显示找不到类文件,因为Test不是类文件的全名 yg@yg-Ubuntu:~/Desktop/code$ java Test Exception in thread "main" java.lang.NoClassDefFoundError: Test (wrong name: me/yanggan/Print/Test) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:788) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:447) at java.net.URLClassLoader.access$100(URLClassLoader.java:71) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
//需要用 java me.yanggan.print.Test(这才是完整类名!)
怎么导入包?
只需要用 import 包名.类名;
//单个包的导入 import me.gander.Person; import me.gander.Fahter; //导入多个 import me.gander.*; //*是通配符,就是导入me.gander目录下的所有类文件
作者:YangGan