java中包(package)
java中包(package)
1、java中包的了解:在java中的包和我们文件系统层次结构是一一对应的。
2、如果在java源文件中没定义package语句,那么该类就在默认包或者叫无名包中。
3、如果在java源文件中定义了package语句,那么编译出来的class文件要放到package中声明的包名对应的文件系统层次结构中去。
4、java包名,不仅仅是以目录结构来存放类文件,同时也给这个类添加了限定名,我们。
如下是java包入门案例:
1 E:\Res\2023>javac -encoding utf-8 MyPrinter.java 2 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 3 8 E:\Res\2023>java MyPrinter 9 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 10 错误: 找不到或无法加载主类 MyPrinter 30 E:\Res\2023>mkdir wlk35 36 E:\Res\2023>move MyPrinter.class wlk 37 移动了 1 个文件。 38 39 E:\Res\2023>cd wlk52 53 E:\Res\2023\wlk>java MyPrinter #java包名,不仅仅是以目录结构来存放类文件,同时也给这个类添加了限定名 54 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 55 错误: 找不到或无法加载主类 MyPrinter 56 57 E:\Res\2023\wlk>java wlk.MyPrinter #这里虽然java后加了全类限定名,但是不能在包名对应的文件目录里执行 58 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 59 错误: 找不到或无法加载主类 wlk.MyPrinter 60 61 E:\Res\2023\wlk>cd ../ 62 63 E:\Res\2023>java wlk.MyPrinter 64 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 65 java中包的学习(package) 66 67 E:\Res\2023>
java后的限定名除了可以用点(.)外,还可以用斜杆(/),见如下:
E:\Res\2023>java wlk/MyPrinter
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
java中包的学习(package)
E:\Res\2023>
5、java中包名可以多个层级结构,案例如下:
1 package com.zls.wlk; 2 3 public class MyPrinter{ 4 public static void main(String[] args){ 5 MyPrinter myPrinter = new MyPrinter(); 6 myPrinter.print("java中包的学习(package)"); 7 } 8 public void print(String str){ 9 System.out.println(str); 10 } 11 }
运行结果如下:
1 E:\Res\2023>javac -encoding utf8 MyPrinter.java 2 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 3 4 E:\Res\2023>md com\zls\wlk 5 6 E:\Res\2023>move MyPrinter.class com\zls\wlk\ 7 移动了 1 个文件。 8 9 E:\Res\2023>java com.zls.wlk.MyPrinter 10 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 11 java中包的学习(package) 12 13 E:\Res\2023>
6、我们执行有包名的类,需要手动创建包名对应的目录结构,很麻烦,怎么解决呢?
1 E:\Res\2023>del wlk 2 E:\Res\2023\wlk\*, 是否确认(Y/N)? Y 3 4 E:\Res\2023>javac -d . MyPrinter.java #关于有包名的类编译的时候,可以加-d选项,使得编译时自动把类放到对应的目录结构里。 5 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 6 7 E:\Res\2023>java com.zls.wlk.MyPrinter 8 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 9 java中包的学习(package) 10 11 E:\Res\2023>
7、也可以把编译后的字节码文件放到任意目录下:
1 :\Res\2023>d: 2 3 D:\>md temp 4 5 D:\>cd temp 6 7 D:\temp>e: 8 9 E:\Res\2023>javac -encoding utf8 -d D:\temp MyPrinter.java 10 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 11 12 E:\Res\2023>java com.zls.wlk.MyPrinter 13 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 14 错误: 找不到或无法加载主类 com.zls.wlk.MyPrinter 15 16 E:\Res\2023>set classpath=D:\temp #注意:带有包名的类在执行是设置classpath时,路径写到包名目录结构的父目录 17 18 E:\Res\2023>java com.zls.wlk.MyPrinter 19 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 20 java中包的学习(package) 21 22 E:\Res\2023>
8、在工作中,包名都是用公司域名倒过来写(假如有个域名是:http://wlk.zls.com,那么包名就可以写成com.zls.wlk)
好了,今天就说到这里,下课。