1.5java包概念

在 Java 里,包(Package)是组织类和接口的一种机制,其作用是管理代码、避免命名冲突以及访问控制。

1. 包的概念与作用

  • 组织代码:包能把相关的类和接口组织在一起,让代码结构更加清晰。例如,在一个大型项目中,可按功能模块划分不同的包,像数据库操作相关的类放在 database 包,用户界面相关的类放在 ui 包。
  • 避免命名冲突:不同包中可以存在同名的类,因为全限定名(包名 + 类名)是唯一的。例如,java.util.Date 和 java.sql.Date 虽然类名相同,但属于不同的包,不会产生冲突。
  • 访问控制:包可以对类、方法和变量的访问进行控制。通过包的访问权限修饰符,能限制其他包中的类对本包内成员的访问。

2.包命名规范详解

规则项说明示例错误示例
​逆域名结构​以组织域名反转开头(如com.company.projectcom.baidu.searchBaidu.search
​全小写字母​禁止使用大写字母(避免OS大小写敏感问题)net.example.appNet.Example.App
​单词分隔​使用.连接,​​不​​用下划线/连字符java.iojava_io / java-io
​长度控制​建议不超过5级(如com.company.product.moduleorg.apache.commonscom.company.very.long.package.name

3. 命名策略

  • 域名反转 + 项目名 + 模块名
    // 企业域名:example.com → 项目名:crm → 模块:service
    package com.example.crm.service;
目录映射
包名文件系统路径
java.utiljava/util/
com.company.projectcom/company/project/
使用包

使用其他包中的类时,有两种方式:

  • 全限定名:直接使用类的全限定名,示例如下:
java.util.Date date = new java.util.Date();
  • 导入包:使用 import 语句导入包,之后就可以直接使用类名,示例如下:

java

import java.util.Date;

public class Main {
    public static void main(String[] args) {
        Date date = new Date();
    }
}

若要导入一个包中的所有类,可以使用通配符 *

import java.util.*;

4. 系统包与自定义包

系统包

Java 提供了许多系统包,例如:

  • java.lang:包含了 Java 语言的核心类,如 ObjectStringInteger 等。该包会被自动导入,无需使用 import 语句。
  • java.util:包含了各种实用工具类和集合框架,如 ArrayListHashMapDate 等。
  • java.io:包含了输入输出相关的类,如 FileInputStreamOutputStream 等。
自定义包

你可以根据项目需求创建自定义包。例如,创建一个名为 com.example.util 的包,用于存放项目中的工具类:

package com.example.util;

public class MyPrint {
    public static void print(String str) {
        System.out.println(str);
    }
}

5. 包的访问权限

Java 有四种访问权限修饰符,它们与包的关系如下:

  • public:被 public 修饰的类、方法和变量可以被任何包中的类访问。
  • protected:被 protected 修饰的成员可以被同一包中的类以及不同包中的子类访问。
  • 默认(无修饰符):默认访问权限的成员只能被同一包中的类访问。
  • private:被 private 修饰的成员只能在本类中访问,与包无关。

6. 包的编译与运行

编译和运行包含包的 Java 程序时,需要注意类路径的设置。假设项目结构如下:

javaDemo
└── com
    └── example
        └── myapp
            └── Main.java
        └── util
            └── MyPrint.java

编译时,使用 -d 选项指定编译输出目录:

  • 目录存在性:如果 bin 目录不存在,javac 会自动创建它。但如果没有足够的权限创建目录,会抛出错误。
  • 包结构:确保 Main.java 中的包声明与文件所在的目录结构一致,否则可能会出现编译错误。例如,若 Main.java 声明了 package com.example.myapp;,那么它必须存放在 com/example/myapp 目录下。
  • 当前工作目录:该命令是相对于当前工作目录执行的。所以在执行命令前,要确保当前工作目录是正确的
javac -d bin com/example/myapp/Main.java

运行时,需要指定类的全限定名:

-cp

  • -cp 是 java 命令的一个选项,它是 -classpath 的缩写。-classpath 用于指定 JVM 在运行 Java 程序时查找类文件的路径。java -cp bin 代表把 当前bin目录 放到 java查找路径里
java -cp bin com.example.myapp.Main

集成开发环境给我们做了简化。在集成开发里直接点 run

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chxii

小小打赏,大大鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值