命令行下的Java包结构编译与执行

简介: 本文介绍命令行下的Java包结构编译与执行方法

编写代码

com.hhh.test.PackageTest

package com.hhh.test;

public class PackageTest {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

com.hhh.test2.PackageTest2

package com.hhh.test2;

import com.hhh.test.PackageTest;

public class PackageTest2 {
    public static void main(String[] args) {
        PackageTest obj = new PackageTest();
        System.out.println("Hello World");
    }
}

预处理

跳转到指定区域

  • PackageTest.javaPackageTest2.java文件放到D:\PackageTest路径下。
  • cmd输入D: ,从C盘切到D盘。
  • 输入命令cd D:\PackageTest,跳转到指定路径下。

在这里插入图片描述

编译第一个文件

输入命令javac PackageTest.java,编译第一个文件,生成PackageTest.class

在这里插入图片描述

编译第二个文件

输入命令javac PackageTest2.java,编译第二个文件,却报错了:
在这里插入图片描述

其实我们import了啊,但为什么找不到呢?
看错误原因:程序包com.hhh.test不存在
不知道大家在使用Eclipse、IDEA等IDE的时候记不记得那包结构看起来就是一层一层的“文件夹”?

更正编译指令,重新编译程序一

输入命令javac -d . PackageTest.java,重新编译第一个文件,生成包结构的“文件夹”。
我们逐层打开看看是什么样子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这才是真正的把包结构弄出来了。

重新编译程序二

输入命令javac PackageTest2.java,编译第二个文件,生成PackageTest2.class
在这里插入图片描述
使用-d .可以达到预期,并且发现com和hhh果真是合并在一起的,只是test和test2分列两个文件夹:
在这里插入图片描述
在这里插入图片描述

运行程序一

如下运行,报错,找不到Class文件,无法加载主类(请注意:已编译完成,所以不要去找.java。JVM解释执行的是.class):
在这里插入图片描述

于是想到,实际上在命令行使用包结构的时候必须要使用包全名才能执行,且不需要跳到.class文件的具体路径:
在这里插入图片描述

运行程序二

在这里插入图片描述

探究自建文件夹是否有效

我们先不使用-d .,而是进行普通的编译,然后自己新建文件夹,把编译好的.class放进去,再执行:
在这里插入图片描述

得到了同样的结果,也就是可执行的,是有效的。

探究拆了文件夹能否执行

其实根据PackageTest2.java编译通不过这件事我们就能推测出这肯定不能执行,但实践出真知嘛:
在这里插入图片描述

对package的思考

package为何而存在

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

package的作用

  • 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
  • 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
  • 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

Java与package

Java 使用包(package)这种机制是为了防止命名冲突,进行访问控制,便于搜索和定位类(class)、接口(interface)、枚举(enumeration)和注解(annotation)等。

package既是一种机制、一种结构,也是一个关键词。

我们编写一个类的时候,.java源文件的顶部就是package package1[.package2[.package3[...]]];这种语法格式,其中package正是我们说的那个关键词。

在导入包的时候就要用import,语法格式是:import package1[.package2[.package3[...]]].ClassName;。当然也有 import static 这种操作,此处就不提了。

相关文章
|
7天前
|
Java Linux
java基础(3)安装好JDK后使用javac.exe编译java文件、java.exe运行编译好的类
本文介绍了如何在安装JDK后使用`javac.exe`编译Java文件,以及使用`java.exe`运行编译好的类文件。涵盖了JDK的安装、环境变量配置、编写Java程序、使用命令行编译和运行程序的步骤,并提供了解决中文乱码的方法。
21 1
|
14天前
|
安全 Java API
JAVA并发编程JUC包之CAS原理
在JDK 1.5之后,Java API引入了`java.util.concurrent`包(简称JUC包),提供了多种并发工具类,如原子类`AtomicXX`、线程池`Executors`、信号量`Semaphore`、阻塞队列等。这些工具类简化了并发编程的复杂度。原子类`Atomic`尤其重要,它提供了线程安全的变量更新方法,支持整型、长整型、布尔型、数组及对象属性的原子修改。结合`volatile`关键字,可以实现多线程环境下共享变量的安全修改。
|
2天前
|
Java API 数据处理
Java 包(package)的作用详解
在 Java 中,包(package)用于组织和管理类与接口,具有多项关键作用:1)系统化组织代码,便于理解和维护;2)提供命名空间,避免类名冲突;3)支持访问控制,如 public、protected、默认和 private,增强封装性;4)提升代码可维护性,实现模块化开发;5)简化导入机制,使代码更简洁;6)促进模块化编程,提高代码重用率;7)管理第三方库,避免命名冲突;8)支持 API 设计,便于功能调用;9)配合自动化构建工具,优化项目管理;10)促进团队协作,明确模块归属。合理运用包能显著提升代码质量和开发效率。
|
2天前
|
Java 数据安全/隐私保护
Java 包(package)的使用详解
Java中的包(`package`)用于组织类和接口,避免类名冲突并控制访问权限,提升代码的可维护性和可重用性。通过`package`关键字定义包,创建相应目录结构即可实现。包可通过`import`语句导入,支持导入具体类或整个包。Java提供多种访问权限修饰符(`public`、`protected`、`default`、`private`),以及丰富的标准库包(如`java.lang`、`java.util`等)。合理的包命名和使用对大型项目的开发至关重要。
|
12天前
|
IDE Java 编译器
lombok编译遇到“找不到符号的问题”
【9月更文挑战第18天】当使用 Lombok 遇到 “找不到符号” 的问题时,可能是由于 Lombok 未正确安装、编译器不支持、IDE 配置不当或项目构建工具配置错误。解决方法包括确认 Lombok 安装、编译器支持,配置 IDE 和检查构建工具配置。通过这些步骤通常可解决问题,若问题仍存在,建议检查项目配置和依赖,或查看日志获取更多信息。
|
2月前
|
Java
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
Java应用结构规范问题之在UnitConvertUtils工具类将千米转换为米的问题如何解决
|
2月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
2月前
|
存储 安全 Java
深入探讨Java的分层编译
本文主要探讨Java虚拟机(JVM)中的分层编译(Tiered Compilation)机制及其对程序性能的影响。
|
2月前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
Java应用结构规范问题之配置Logback以在控制台输出日志的问题如何解决
|
2月前
|
Java Maven 数据库
Java 包(package)
Java 包(package)
29 1