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)

好了,今天就说到这里,下课。

 

posted @ 2023-02-04 23:25  江龍  阅读(261)  评论(0编辑  收藏  举报