182. Java 包 - 创建和使用 Java 包

182. Java 包 - 创建和使用 Java 包

Java 中,包(Package 是组织类和接口的一种机制。它可以帮助我们将相关的类型组织在一起,避免命名冲突,并使代码更加模块化和可维护。


🚀 创建自定义包

要定义一个包,需要在 Java 源文件的顶部,使用 package 语句:

java 复制代码
package com.example.shapes;

public class Circle {
    public double radius;
    public Circle(double r) {
        radius = r;
    }
}

🧠 注意

  • package 语句必须是文件中的第一个非注释、非空白行。
  • 包名通常使用 全小写字母
  • 使用公司反向域名作为前缀是常见的命名规范(例如 com.example),以避免与其他开发者的包发生冲突。

🧭 使用其他包中的类

如果你想在另一个包中使用上面定义的 Circle 类,有三种方式可以做到:

✅ 方法一:使用完全限定名

java 复制代码
com.example.shapes.Circle c = new com.example.shapes.Circle(5.0);

这种方式清晰明了,不需要额外的导入语句。但写起来比较啰嗦,不推荐在大量使用时采用。


✅ 方法二:导入指定类

java 复制代码
import com.example.shapes.Circle;

public class App {
    public static void main(String[] args) {
        Circle c = new Circle(5.0);
    }
}

这是最常见的使用方式,推荐在你只需要使用某几个类时使用。


✅ 方法三:导入整个包

java 复制代码
import com.example.shapes.*;

public class App {
    public static void main(String[] args) {
        Circle c = new Circle(5.0);
        // 还可以使用该包中其他类型,如 Square、Rectangle(如果有)
    }
}

使用 * 表示导入该包中所有的类(不包括子包)。适合你频繁使用某个包中多个类的情况,但过度使用可能会增加类名冲突的风险。


📁 包结构与文件路径

Java 包名与文件系统路径是一一对应的,例如:

java 复制代码
com/example/shapes/Circle.java

编译后生成的 .class 文件也会被放在相应目录中:

java 复制代码
com/example/shapes/Circle.class

🧠 也就是说,包名决定了类文件的存储路径,这也是 Java 项目组织代码文件的基础。


📦 设置 CLASSPATH(类路径)

如果你将类文件保存在项目以外的路径,JVMJava 编译器可能找不到这些类。此时你就需要设置 CLASSPATH 环境变量。

比如:

java 复制代码
export CLASSPATH=.:/path/to/my/classes

含义:

  • . 表示当前目录
  • /path/to/my/classes 表示你自己的类文件存放路径

💡现代 Java 项目通常使用 构建工具 (如 MavenGradle),它们会自动处理 classpath 的配置,无需手动设置。


✅ 小结

操作 说明 示例
创建包 使用 package 语句 package com.example.tools;
使用类(完全限定名) 不需要 import,但繁琐 new com.example.shapes.Circle()
使用类( import单个类) 简洁明了 import com.example.shapes.Circle;
使用类( import整个包) 导入多个类方便 import com.example.shapes.*;
包路径对应 包名与文件路径一一对应 com/example/shapes/Circle.java
设置类路径 用于指定 class 文件查找路径 CLASSPATH=.:/your/classes/dir
相关推荐
醉逍遥neo10 分钟前
react项目热更新问题
前端·react·热更新·umi·umi max
专注前端30年13 分钟前
Vue3 watchEffect详解:核心用法与原理剖析
前端·javascript·vue.js
hwt107035989814 分钟前
Vue项目,解决Node依赖错误问题
前端·javascript·vue.js
LYFlied33 分钟前
前端性能优化工程化落地指南:从基础实践到极致性能突破
前端·性能优化·工程化
阿珊和她的猫37 分钟前
Webpack常用配置项详解
前端·webpack·node.js
codelang40 分钟前
用另一种方式让《留白》继续存在下去
前端
研☆香1 小时前
什么是对象 什么是数组 区别是什么??
java·前端·javascript
cike_y1 小时前
Spring的配置&各种依赖注入
java·开发语言·后端·spring
vx_bisheyuange1 小时前
基于SpringBoot的房屋交易平台
前端·javascript·vue.js·毕业设计
椰果子1 小时前
Nacos 2.x.x版本不适用JDK17的处理方式
java·spring boot·后端