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

package包机制详解

目录

一、包的概念

1.定义:

2.目的:

二、包的创建和使用

1.创建包:

2.使用包中的类:

3.注意点:

(1).错误信息分析(错误1)

(2).错误信息分析(错误2)

三、包的访问权限修饰符

1.public:

2.protected:

3.default(默认,即不写任何修饰符):

4.private:

四、常见的包(系统包)


一、包的概念

1.定义:

包是 Java 中用于组织类和接口的一种机制,它类似于文件系统中的文件夹,将相关的类和接口组织在一起,方便管理和维护代码。

包是通过在Java源文件的开头使用 package 关键字来定义的。例如:

package com.example.mypackage;

public class MyClass {
    // 类的定义
}

2.目的:

避免命名冲突:不同的开发人员或团队可能会编写具有相同名称的类,如果没有包机制,这些类在同一个项目中会产生冲突。通过将类放在不同的包中,可以有效地避免这种情况。例如,一个团队开发的用于处理用户信息的类User,和另一个团队开发的用于处理订单信息的类User,可以分别放在com.team1.user和com.team2.order包中,这样就不会混淆。

提供更好的代码组织和结构:可以根据功能、模块等将类进行分类,使代码结构更加清晰,便于理解和查找。比如,将所有与数据库操作相关的类放在com.example.database包中,将与图形界面相关的类放在com.example.ui包中。

二、包的创建和使用

1.创建包:

在 Java 源文件的开头使用package关键字声明包名,例如:package com.example.myproject;,这表示该源文件中的所有类都属于com.example.myproject包。

包名通常采用域名倒序的方式,以确保包名的唯一性。例如,如果公司的域名是mycompany.com,那么可以使用com.mycompany作为包的前缀,然后根据项目或模块进一步细分包名。

2.使用包中的类:

同一包中的类:在同一包中的类可以直接相互访问,无需额外的导入声明。例如,如果ClassA和ClassB都在com.example.myproject包中,那么ClassA可以直接创建ClassB的对象并调用其方法。 不同包中的类:如果要使用其他包中的类,需要使用import语句进行导入。例如,如果要使用java.util包中的ArrayList类,可以在源文件开头添加import java.util.ArrayList;。如果要导入某个包下的所有类,可以使用import com.example.otherpackage.*;,但不建议这样做,因为可能会导入一些不需要的类,增加编译和运行时的负担,并且可能会导致命名冲突。

 导入包

要在另一个类中使用某个包中的类,可以使用 import 语句。例如:

import com.example.mypackage.MyClass;

public class AnotherClass {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
    }
}

如果要导入包中的所有类,可以使用通配符 *

import com.example.mypackage.*;

默认包
如果没有指定包名,类将属于默认包。默认包中的类可以直接相互访问,但不推荐使用默认包,因为它不利于代码的组织和管理。

package语法:

1. package是包机制,有什么用?
    便于管理。不同的类放在不同的包下。好维护。

2. package语句只能写1行,并且只能写在java源码的第一行。

3. 怎么定义包?
    package 包名;

4. 定义了包之后,怎么带包编译?
    javac -d . PackageTest01.java
    语法:javac -d 生成目录 源文件路径

    当然,也可以不带包编译,编译之后,可以手动创建目录,这种方式比较麻烦。

5. 一旦定义了package之后,有了包之后,怎么运行java程序呢?
    重点强调:有了package之后,完整的类名是带包名的。所以运行的时候一定要添加包名:
        java org.apache.struts.PackageTest02

6. package命名规范:
    - 所有的包名都是小写。
    - 包名的命名规范:
        公司域名倒序 + 项目名 + 模块名 + 功能名;
    - 例如:com.powernode.oa.empmgt.service;

3.注意点:

有了package之后,完整的类名是带包名的。所以运行的时候一定要添加包名:

例:

public class PackageTest01{
	public static void main(String[] args){
		System.out.println("java语言中的包机制!");
		}}

运行结果:

增加package com;后

因为没有带包名而报错

解决办法:创建一个com的文件夹

把PackageTest01放入com文件夹

可以运行了

(1).错误信息分析(错误1)

错误:找不到或无法加载主类 PackageTest01
原因:java.lang.NoClassDefFoundError: com/PackageTest01(wrong name:PackageTest01)

原因:

Java 虚拟机(JVM)尝试加载 PackageTest01 类,但发现类的全名是 com.PackageTest01,而不是 PackageTest01。

这表明类 PackageTest01 位于 com 包中,但运行时未正确指定包路径。

(2).错误信息分析(错误2)

错误:找不到或无法加载主类 com.PackageTest01
原因:java.lang.ClassNotFoundException: com.PackageTest01

原因:

JVM 尝试加载 com.PackageTest01 类,但未能在类路径中找到该类。

可能是因为类文件未正确编译,或者类路径未正确设置。

三、包的访问权限修饰符

修饰符同一个类中同一个包中的其他类不同包下的子类不同包下的无关类
private×××
空着不写××
protected×
public

1.public:

被public修饰的类、方法或变量可以被其他任何包中的类访问。例如,一个public类PublicClass可以在其他包中通过import com.example.myproject.PublicClass;然后创建对象来使用。

2.protected:

被protected修饰的成员(方法、变量)可以被同一包中的类访问,也可以被该类的子类(无论子类在哪个包中)访问。例如,在com.example.myproject包中有一个ParentClass,其中有一个protected方法protectedMethod,那么在同一包中的其他类可以直接访问该方法,而在其他包中的ParentClass的子类也可以访问该方法,但需要通过子类的对象来调用。

3.default(默认,即不写任何修饰符):

默认访问权限的成员只能被同一包中的类访问。例如,在com.example.myproject包中有一个类DefaultClass,其中有一个默认的方法defaultMethod,那么只有com.example.myproject包中的其他类可以访问defaultMethod,其他包中的类无法访问。

4.private:

被private修饰的成员只能在本类中访问,其他任何类(无论是否在同一包中)都无法访问。例如,在一个类PrivateClass中有一个private变量privateVariable,那么只能在PrivateClass内部的方法中使用该变量。 包机制是 Java 中非常重要的一部分,它有助于提高代码的可维护性、可读性和可扩展性,是 Java 开发者必须掌握的基础知识之一。

四、常见的包(系统包)

java.lang:系统常用基础类(String、Object、System),此包从JDK1.1后自动导入。

java.lang.reflect:java 反射编程包;

java.net:进行网络编程开发包。

java.sql:进行数据库开发的支持包。

java.util:是java提供的工具程序包。包含集合框架、日期时间类等实用工具。

java.io:I/O编程开发包。


http://www.kler.cn/a/488489.html

相关文章:

  • 基于Springboot+Vue的仓库管理系统
  • spring mvc源码学习笔记之八
  • “深入浅出”系列之FFmpeg:(1)音视频开发基础
  • 【Docker】docker compose 安装 Redis Stack
  • 【数据库系统概论】第5章 数据库完整性【!触发器】
  • 【硬件测试】基于FPGA的BPSK+帧同步系统开发与硬件片内测试,包含高斯信道,误码统计,可设置SNR
  • HTML实战课堂之倒计时页面
  • 如何使用Scala和Selenium爬取知乎视频并保存到本地
  • 分布式ID—雪花算法
  • 【python翻译软件V1.0】
  • 计算机毕业设计hadoop+spark+hive新能源汽车推荐系统 汽车数据分析可视化大屏 新能源汽车推荐系统 汽车爬虫 汽车大数据 机器学习
  • istio-proxy oom问题排查步骤
  • JVM 触发类加载的条件有哪些?
  • 修改sshd默认配置,提升安全
  • Elasticsearch—索引库操作(增删查改)
  • word论文排版常见问题汇总
  • 【JAVA】时间戳和日期时间互转
  • 使用 Spring Boot 实现钉钉消息发送消息
  • computer与watch坚挺的区别与使用
  • Java 工厂模式、工厂方法模式、抽象工厂模式
  • IIS部署.NetCore/.Net8/.Net9项目(从装环境到配置Swagger)
  • 算法面试1
  • HTML5 渐变动画(Gradient Animation)
  • 给定差值的组合
  • day03-前端Web-Vue3.0基础
  • 面向对象分析与设计Python版 面向对象分析方法