当前位置: 首页 > web >正文

JavaSE核心知识点02面向对象编程02-04(包和导入)

🤟致敬读者

  • 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉

📘博主相关

  • 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息

文章目录

    • JavaSE核心知识点02面向对象编程02-04(包和导入)
      • **一、包(Package)的作用**
      • **二、定义包**
      • **三、导入(Import)其他包的类**
      • **四、常见场景与注意事项**
        • **1. 同一包内的类无需导入**
        • **2. 不同包中的类必须导入**
        • **3. 处理同名类冲突**
      • **五、默认包(不推荐使用)**
      • **六、包与访问权限**
      • **七、实战练习**
      • **八、常见问题解答**


📃文章前言

  • 🔷文章均为学习工作中整理的笔记。
  • 🔶如有错误请指正,共同学习进步。

JavaSE核心知识点02面向对象编程02-04(包和导入)

包(Package)和导入(Import)是 Java 中组织和管理代码的核心机制,尤其适合项目规模较大时的代码维护。以下是专门整理的详细指南,从基础到实践,逐步掌握它们的使用方法。


一、包(Package)的作用

  1. 避免命名冲突
    不同包中可以有同名的类,例如:com.company1.utils.StringUtilcom.company2.utils.StringUtil
  2. 组织代码结构
    按功能或模块分类类文件,例如:com.example.dao(数据库操作)、com.example.model(数据模型)。
  3. 控制访问权限
    Java 的访问修饰符(如 protected、默认权限)与包密切相关。

二、定义包

  1. 语法
    在 Java 文件的第一行使用 package 声明包:

    package com.example.util;  // 定义当前类属于 com.example.util 包
    
  2. 包命名规范

    • 全部小写,使用公司域名的倒序(如 com.example)。
    • 多层包名用 . 分隔,对应文件系统的目录结构(如 com/example/util)。
  3. 示例

    • 文件路径:src/com/example/util/StringUtil.java
    • 类定义:
      package com.example.util;  // 必须与目录结构一致!public class StringUtil {public static String trim(String str) {return str.trim();}
      }
      

三、导入(Import)其他包的类

  1. 为什么需要导入
    使用其他包中的类时,需要通过 import 引入,否则需写类的全限定名(Fully Qualified Name)。

  2. 导入单个类

    import java.util.ArrayList;  // 导入 ArrayListpublic class Main {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();}
    }
    
  3. 导入整个包
    使用通配符 * 导入包下所有类(不推荐,可能引发命名冲突):

    import java.util.*;  // 导入 java.util 包下的所有类
    
  4. 静态导入(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() {}   // 仅本类可见
}

七、实战练习

  1. 创建包和类

    • 创建包 com.example.utils,在其中定义工具类 MathUtils
    • 在另一个包 com.example.app 中创建 Main 类,导入并使用 MathUtils
  2. 代码示例

    // 文件: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}
    }
    

八、常见问题解答

  1. IDE(如 IntelliJ IDEA)如何帮助管理包?

    • 自动生成包目录结构。
    • 自动提示导入缺失的类。
    • 优化导入(删除未使用的导入)。
  2. 导入会影响性能吗?

    • 不会!import 仅是编译时声明,不影响运行时性能。
  3. 为什么有时需要写全限定名?

    • 当两个导入的类同名时(如 java.util.Datejava.sql.Date),必须用全限定名区分。

掌握包和导入后,你的代码将更加结构化,团队协作和大型项目管理也会更轻松!遇到问题时,多动手写代码实践,理解会更深刻。


📜文末寄语

  • 🟠关注我,获取更多内容。
  • 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
  • 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
  • 🔵​加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
  • 🟣点击下方名片获取更多内容🍭🍭🍭👇

http://www.xdnf.cn/news/4888.html

相关文章:

  • 运用fmpeg写一个背英文单词的demo带翻译
  • 前台--Android开发
  • 5.9-selcct_poll_epoll 和 reactor 的模拟实现
  • 高效对接:金蝶采购申请单集成钉钉案例解析
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 在线打开Word文件,并用前端对话框实现填空填表
  • RAG vs 传统生成模型:核心差异与适用场景
  • ‌云原生CAE软件
  • 学习搭子,秘塔AI搜索
  • 基于大模型预测的足月胎膜早破行阴道分娩全流程研究报告
  • 图像泊松融合(convpyr_small版本)
  • 单调栈所有模版型题目(1)
  • Maven 处理依赖冲突
  • 【IDEA_Maven】(进阶版)永久性的更改IDEA中每个项目所依赖的Maven默认配置文件及其仓库路径
  • 学习心得《How Global AI Policy and Regulations Will Impact Your Enterprise》Gartner
  • 七、Hadoop 历史追踪、数据安全阀与 MapReduce初体验
  • WORD压缩两个免费方法
  • Java 集合体系深度解析面试篇
  • Java如何获取电脑分辨率?
  • 虚拟文件系统
  • 正大视角下的结构交易节奏:如何借助数据捕捉关键转折
  • java-反射精讲
  • 1236. 递增三元组
  • STL?vector!!!
  • spring ai alibaba 使用 SystemPromptTemplate 很方便的集成 系统提示词
  • U9C-SQL-采购订单视图
  • RGB矩阵照明系统详解及WS2812配置指南
  • 机器学习-无量纲化与特征降维(一)
  • flask开启https服务支持
  • 基于WSL用MSVC编译ffmpeg7.1
  • O2OA(翱途)服务器故障排查