JavaSE核心知识点02面向对象编程02-04(包和导入)
🤟致敬读者
- 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉
📘博主相关
- 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息
文章目录
- JavaSE核心知识点02面向对象编程02-04(包和导入)
- **一、包(Package)的作用**
- **二、定义包**
- **三、导入(Import)其他包的类**
- **四、常见场景与注意事项**
- **1. 同一包内的类无需导入**
- **2. 不同包中的类必须导入**
- **3. 处理同名类冲突**
- **五、默认包(不推荐使用)**
- **六、包与访问权限**
- **七、实战练习**
- **八、常见问题解答**
📃文章前言
- 🔷文章均为学习工作中整理的笔记。
- 🔶如有错误请指正,共同学习进步。
JavaSE核心知识点02面向对象编程02-04(包和导入)
包(Package)和导入(Import)是 Java 中组织和管理代码的核心机制,尤其适合项目规模较大时的代码维护。以下是专门整理的详细指南,从基础到实践,逐步掌握它们的使用方法。
一、包(Package)的作用
- 避免命名冲突
不同包中可以有同名的类,例如:com.company1.utils.StringUtil
和com.company2.utils.StringUtil
。 - 组织代码结构
按功能或模块分类类文件,例如:com.example.dao
(数据库操作)、com.example.model
(数据模型)。 - 控制访问权限
Java 的访问修饰符(如protected
、默认权限)与包密切相关。
二、定义包
-
语法
在 Java 文件的第一行使用package
声明包:package com.example.util; // 定义当前类属于 com.example.util 包
-
包命名规范
- 全部小写,使用公司域名的倒序(如
com.example
)。 - 多层包名用
.
分隔,对应文件系统的目录结构(如com/example/util
)。
- 全部小写,使用公司域名的倒序(如
-
示例
- 文件路径:
src/com/example/util/StringUtil.java
- 类定义:
package com.example.util; // 必须与目录结构一致!public class StringUtil {public static String trim(String str) {return str.trim();} }
- 文件路径:
三、导入(Import)其他包的类
-
为什么需要导入
使用其他包中的类时,需要通过import
引入,否则需写类的全限定名(Fully Qualified Name)。 -
导入单个类
import java.util.ArrayList; // 导入 ArrayListpublic class Main {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();} }
-
导入整个包
使用通配符*
导入包下所有类(不推荐,可能引发命名冲突):import java.util.*; // 导入 java.util 包下的所有类
-
静态导入(Static Import)
导入类的静态成员(方法或变量),可直接使用:import static java.lang.Math.PI; // 导入 Math 类的 PI 常量public class Circle {double area(double radius) {return PI * radius * radius; // 直接使用 PI,无需写 Math.PI} }
四、常见场景与注意事项
1. 同一包内的类无需导入
// 文件:com/example/Main.java
package com.example;public class Main {public static void main(String[] args) {User user = new User(); // User 类在同一个包 com.example 中,无需导入}
}// 文件:com/example/User.java
package com.example;public class User {// 类定义
}
2. 不同包中的类必须导入
// 文件:com/test/App.java
package com.test;import com.example.User; // 导入其他包的类public class App {public static void main(String[] args) {User user = new User();}
}
3. 处理同名类冲突
如果两个包中有同名类,需用全限定名或只导入其中一个:
import java.util.Date; // 导入 java.util.Datepublic class ConflictExample {public static void main(String[] args) {Date utilDate = new Date(); // java.util.Datejava.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis()); // 全限定名}
}
五、默认包(不推荐使用)
- 如果不写
package
语句,类会放在默认包(无名包)。 - 问题:默认包的类无法被其他包的类导入,且容易引发命名冲突。
- 建议:始终为类指定明确的包名!
六、包与访问权限
public
:所有包可见。protected
:同包或子类可见。- 默认(无修饰符):同包可见。
private
:仅本类可见。
package com.example;public class Demo {public void publicMethod() {} // 所有包可见protected void protectedMethod() {} // 同包或子类可见void defaultMethod() {} // 同包可见private void privateMethod() {} // 仅本类可见
}
七、实战练习
-
创建包和类
- 创建包
com.example.utils
,在其中定义工具类MathUtils
。 - 在另一个包
com.example.app
中创建Main
类,导入并使用MathUtils
。
- 创建包
-
代码示例
// 文件:com/example/utils/MathUtils.java package com.example.utils;public class MathUtils {public static int add(int a, int b) {return a + b;} }// 文件:com/example/app/Main.java package com.example.app;import com.example.utils.MathUtils; // 导入工具类public class Main {public static void main(String[] args) {int sum = MathUtils.add(3, 5);System.out.println("Sum: " + sum); // 输出 Sum: 8} }
八、常见问题解答
-
IDE(如 IntelliJ IDEA)如何帮助管理包?
- 自动生成包目录结构。
- 自动提示导入缺失的类。
- 优化导入(删除未使用的导入)。
-
导入会影响性能吗?
- 不会!
import
仅是编译时声明,不影响运行时性能。
- 不会!
-
为什么有时需要写全限定名?
- 当两个导入的类同名时(如
java.util.Date
和java.sql.Date
),必须用全限定名区分。
- 当两个导入的类同名时(如
掌握包和导入后,你的代码将更加结构化,团队协作和大型项目管理也会更轻松!遇到问题时,多动手写代码实践,理解会更深刻。
📜文末寄语
- 🟠关注我,获取更多内容。
- 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
- 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
- 🔵加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
- 🟣点击下方名片获取更多内容🍭🍭🍭👇