Java——包(概念理解+应用举例)

简介: Java——包(概念理解+应用举例)

1.对包的理解(Package


为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间Java中的一个package()就是一个类库单元。

包内包含有一组类,他们在单一的名字空间之下被逻辑组织在了一起。 

package的作用就是C++namespace的作用,防止名字相同的类产生冲突。Java 编译器在编译时,直接根据 package 指定的信息直接将生成的 class 文件生成到对应目录下。例如 package aaa.bbb.ccc 编译器就将该 .java 文件下的各个类生成到工作目录 /aaa/bbb/ccc/ 这个子目录下。

包的作用主要有以下几点:

把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,但不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免命名上的冲突。

包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。 包是逻辑访问控制单元,构建类库单元(安全访问),包名相同的类在一个包内,与类的存放位置无关。类的访问控制符:public 和包(默认 friendly)。对类的名称进行完全控制(完全限定类名),解决了名称的冲突问题。

包的命名规范:包的命名规范:公司域名反写.project(项目名称).module(模块名称),全部小写。 

类的完全限定名: 公司域名反写.project(项目名称).module(模块名称).ClassName(类名)

命名空间:包名是定义类名称的命名空间,保证类名的唯一。类的完全限定名=包名(命名空间).类名 


创建好一个包之后,在这个包内继续创建其他类文件,就如同上图这样的树形结构,文件夹的形式。


2.包的应用举例


如上图,我们先创建了一个包,包名为:com.horstmann.corejava,紧接着在包内创建一个不含main方法的类文件Employee,最后我们在上面的默认包(default package)中,创建一个包含main方法的类文件PackTest。详细内容我们来看下面的代码:👇👇👇 

package com.horstmann.corejava;
import java.util.*;
public class Employee { //编译之后此行代码为:package com.horstmann.corejava.Employee
  private String name;
  private int age;
  private String hobby;
  public Employee(String name,int age,String hobby) {
    this.name=name;
    this.age=age;
    this.hobby=hobby;
  }
  public String getName() {
    return this.name;
  }
  public int getAge() {
    return this.age;
  }
  public String getHobby() {
    return this.hobby;
  }
  public void Study() {
    System.out.println("姓名:"+this.name+",年龄:"+this.age
              +",爱好:"+this.hobby+"!!!");
  }
}
import com.horstmann.corejava.*;
import java.util.*;
public class PackageTest { //默认包中,编译后就存放在当前目录下
  public static void main(String[] args) {
    Employee a=new Employee("张三",20,"玩游戏");
    a.Study();
  }
}

可以看到第一个代码框中的第一行:package com.horstmann.corejava; 这条语句是创建完包,并且在其中创建类文件之后,在程序块的第一行自动生成的,表示Employee类文件在com.horstmann.corejava包下。(package关键字)

在第二个代码框中的第一行,我们使用 import com.horstmann.corejava.*; 这条语句来导入com.horstmann.corejava包中的所有文件内容,如果只想导入其中的Employee类文件,可以修改为 import com.horstmann.corejava.Employee。(import关键字)

.java 源程序中,如果没有 package 关键字,则该编译单元中类生成的 .class 类文件,将存放在当前目录中,称为默认包或未命名包,即(default package)。

代码中,剩余部分的内容,基本上都挺好理解的,下面我们来看一下上述代码的运行结果:👇👇👇



我们在上文中,提到了Java 中的一个package()就是一个类库单元。它采用的是树形结构,也可以看成是文件夹的形式,下面,我们就上面两段代码,在我的电脑中,查看一下这个文件夹。👇👇👇

可以看到,我们的PackageTest类文件是存放在默认包(default package)中的,所以没有具体的包名对应的文件夹,直接就存放在src当前目录下。 


我们再来看这张图,大家对比前面那张图里的创建包以及包内类文件的具体名称,包名为 com.horstmann.corejava ,那么在这个包内的类文件就应该是 com.horstmann.corejava.Employee ,所以大家对照这个包名和类文件名,就会发现,它完全符合树形结构的文件夹存放形式!!! 大家在查找路径的时候,应该也会发现在 bin 文件夹和 src 文件夹的目录下,这部分包文件和类文件几乎是完全一样的。但是实际上这两者还是有区别的。

对于bin目录下:全称是binary,它里面存放的是二进制文件,就是 .class 文件。

对于src目录下:全称是source,它里面存放的是 .java 源文件。


那么,以上就是博主总结的有关Java中的包的相关概念及应用。希望为大家学习包提供有效地帮助!!!欢迎大家的访问,喜欢的朋友们,也可以点赞关注!!!感谢大家的支持!!!😀😀😀

相关文章
|
2天前
|
Java 测试技术
Java一分钟之-正则表达式在Java中的应用
【5月更文挑战第14天】正则表达式是Java中用于文本处理的强大力量,通过`java.util.regex`包支持。常见问题包括元字符的理解、边界匹配和贪婪/懒惰量词的使用。错误通常涉及未转义特殊字符、不完整模式或过度匹配。要避免这些问题,需学习实践、使用在线工具和测试调试。示例代码展示了如何验证邮箱地址。掌握正则表达式需要不断练习和调试。
17 2
|
23小时前
|
安全 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【5月更文挑战第16天】 在移动开发领域,性能一直是开发者关注的焦点。随着Kotlin语言的普及,其与Java在Android应用中的性能表现成为热门话题。本文将深入分析Kotlin和Java在Android平台上的性能差异,并通过实际测试数据来揭示二者在编译速度、应用启动时间以及运行效率方面的表现。我们的目标是为开发者提供一个参考依据,以便在选择合适的编程语言时做出更加明智的决策。
|
2天前
|
前端开发 Java 测试技术
Java一分钟之Spring MVC:构建Web应用
【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
51 3
|
2天前
|
Java 开发工具 Maven
java解析apk获取应用信息
请注意,你需要替换"path/to/your/apkfile.apk"为你的APK文件的实际路径。
10 0
|
2天前
|
Java 编译器 Shell
Java 包(package)
5月更文挑战第8天
|
2天前
|
Java
【Java开发指南 | 第三十一篇】Java 包(package)
【Java开发指南 | 第三十一篇】Java 包(package)
11 1
|
2天前
|
Java 编译器 开发者
Java一分钟之-Java注解的理解与应用
【5月更文挑战第12天】本文介绍了Java注解的基础知识和常见应用,包括定义、应用和解析注解。注解在编译检查、框架集成和代码生成等方面发挥重要作用。文章讨论了两个易错点:混淆保留策略和注解参数类型限制,并提供了避免策略。提醒开发者避免过度使用注解,以保持代码清晰。理解并恰当使用注解能提升代码质量。
13 3
|
2天前
|
Java API 开发者
Java中Lambda表达式的深入理解与应用
【5月更文挑战第12天】在Java 8之后,Lambda表达式已经成为了Java开发者必备的技能之一。Lambda表达式以其简洁、灵活的特点,大大提高了编程的效率。本文将深入探讨Lambda表达式的基本概念,语法规则,以及在实际开发中的应用,帮助读者更好地理解和使用Lambda表达式。
|
2天前
|
Java
java面向对象——包+继承+多态(一)-2
java面向对象——包+继承+多态(一)
18 3
|
2天前
|
SQL Java 编译器
java面向对象——包+继承+多态(一)-1
java面向对象——包+继承+多态(一)
17 2