热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java包功能详解:初学者指南(附带教学视频解析)

本文详细解析了Java包的功能及其对初学者的重要性,并通过教学视频进行辅助讲解。文章首先介绍了包的主要作用,包括避免类和方法的命名冲突以及便于管理和组织大量的Java类。随后,逐步引导读者了解工具包中的各个工具类,如StringUtil等,并详细说明了如何配置CLASSPATH环境变量,确保项目中能够正确引用这些类。



包的作用,1是为了防止类和方法的重名,2是为了管理众多的java类。


导航


  • 步骤 1 工具包里面有很多个工具类
  • 步骤 2 StringUtil
  • 步骤 3 目前的情况
  • 步骤 4 CLASSPATH
  • 步骤 5 具体配置
  • 步骤 6 package
  • 步骤 7 验证
  • 步骤 8 亲自做一遍
  • 步骤 9 为什么现在用Editplus运行报错了?
  • 步骤 10 说白了
  • 步骤 11 包的作用
  • 步骤 12 视频地址


步骤 1 工具包里面有很多个工具类

之前讲了打印数据的方法:System.out.println,写这么多字有点麻烦啊。那么我们不妨创建一个StringUtil,Util是工具的意思,里面设计一个newLine方法,用于字符串的打印。

StringUtil是一个工具类,应该放在一个叫做tool的工具包里面。这个tool就是一个文件夹,我暂时把它创建在D盘的根目录。

image


步骤 2 StringUtil

image

创建一个StringUtil.java,不必考虑编码的问题,现在肯定是ANSI,其实就是GBK,除非你用的系统不是简体中文。反正它是支持中文的,用Editplus打开,敲入以下的代码:

class StringUtil
{
public static void newLine(String msg){
System.out.println(msg);
}
}

用javac去编译它,得到.class文件。

image


步骤 3 目前的情况

目录结构是这样的:image

我们的程序在java18文件夹,现在想要调用tool文件夹中的StringUtil里面的newLine方法。

修改Demo.java

class Demo {
public static void main(String[] args){
StringUtil.newLine("StringUtil -> newLine");
}
}

编译代码:

image

说是找不到符号,也难怪,JVM怎么知道有一个StringUtil类呢?


步骤 4 CLASSPATH

如果你学过java,有一定的Java基础,那么你一定知道CLASSPATH的大名。所谓的CLASSPATH,是class和path两个单词,表示“类路径”。就是你告诉JVM,哪些文件夹是我存放类(class文件)的路径。

这个玩意,也是需要配置环境变量的,还记得配置JDK环境变量的步骤吗?

现在来配置CLASSPATH环境变量,如果不记得,可以回去看下之前的章节。

image


步骤 5 具体配置

image

我们一般都是admin用户登录的,所以直接新建系统变量,我们把D盘根目录配置进去,还有一个句点。

D:;.;

左边的D:\代表D盘根目录,右边的小句点,代表当前的那个目录。比如你要在java18文件夹里面去java一下Demo,那么JVM得需要知道当前的目录是java18文件夹。

CLASSPATH这玩意,你要么不配置,不配置就默认是当前目录,一旦配置了,就别忘记加个小点号。

我怕大家不明白,再啰嗦一下,这个配置的意思就是所有的类路径。我们这样配置了以后,JVM会去把D盘根路径,还有你执行程序的当前目录当做根路径,这个待会还会细说。


步骤 6 package

D盘的根目录是我们的类路径,已经配好了。可是StringUtil不在D盘的根目录啊,而在D盘里面一个叫做tool的文件夹。为了让JVM能够知道,我们还得修改StringUtil,加上package。

package tool;
class StringUtil
{
public static void newLine(String msg){
System.out.println(msg);
}
}

步骤 7 验证

tool文件夹也叫做包,现在我们来做验证,给StringUtil加一个main方法。

package tool;
class StringUtil
{
public static void newLine(String msg){
System.out.println(msg);
}
public static void main(String[] args){
newLine("StringUtil");
}
}

用EditPlus的Ctrl+1编译,然后在外面打开CMD黑窗口,不需要进入D盘,直接输入命令。

image

tool.StringUtil,这个“.”很有灵性,JVM会把“.”翻译成\。因为CLASSPATH里面有D:\,所以最终找到的位置是:D:\tool\StringUtil

这下,就很清楚了吧。


步骤 8 亲自做一遍

强烈建议把上面的实验自己做一遍,我相信很多人都不注重这个原理,因为IDEA真香。但是吧,身为程序员,还是要知道一点的,以后出去吹牛逼也有东西不是?


步骤 9 为什么现在用Editplus运行报错了?

你可以试一下,在Editplus里面运行StringUtil,会报错的。

image

原因很简单,因为你加了package

package tool;

你不加的话,就是一个默认的包(default package),也就是CLASSPATH里面所有的路径。你一旦加上这句话,那么运行的时候,JVM就得上纲上线,先去CLASSPATH里面找,然后对应着,看看里面是不是有个tool文件夹。你直接运行是啥意思啊,意思就是你打算直接在CLASSPATH里面找一个StringUtil.class去运行。可是D盘没有这个StringUtil.class,当前目录到是有,可人家开头有一句package tool啊,它认为自己是在D:\tool下面的,也不肯给你运行,所以就找不到了。

除非,你把package tool;去掉。


步骤 10 说白了

说白了,刚才的语句就是

java StringUtil

不加任何包,全裸的,这就叫做默认包(default package),默认包就是你CLASSPATH配置的那些地方。


步骤 11 包的作用

最后了,点题哈,包的作用有两个,1是防止类重名,方法重名。比如,我们写了StringUtil,但是据我所知,很多第三方jar包都有StringUtil,如果不用package来区分,那岂不是乱套了?

2是为了更好的管理class文件,毕竟,你一个项目有很多个class,成百上千个都有可能,不用package来分类,那这个项目还怎么维护啊?


步骤 12 视频地址

https://www.bilibili.com/video/BV1c34112718/



推荐阅读
  • spring boot使用jetty无法启动 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本文介绍了如何在不同操作系统上安装Git,以及一些基本和高级的Git操作,包括项目初始化、文件状态检查、版本控制、分支管理、标签处理、版本回退等,并简要提及了开源许可协议的选择。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 深入理解Dockerfile及其作用
    Dockerfile是一种文本格式的配置文件,用于定义构建Docker镜像所需的步骤。通过使用`docker build`命令,用户可以将Dockerfile中的一系列指令转换成一个可执行的Docker镜像。 ... [详细]
  • 本文将深入探讨 Unreal Engine 4 (UE4) 中的距离场技术,包括其原理、实现细节以及在渲染中的应用。距离场技术在现代游戏引擎中用于提高光照和阴影的效果,尤其是在处理复杂几何形状时。文章将结合具体代码示例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文详细介绍了 `org.apache.tinkerpop.gremlin.structure.VertexProperty` 类中的 `key()` 方法,并提供了多个实际应用的代码示例。通过这些示例,读者可以更好地理解该方法在图数据库操作中的具体用途。 ... [详细]
  • 本文介绍了如何通过命令行有效地终止所有 Node.js 进程实例,以解决因端口冲突或其他服务冲突导致的问题。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 根据官方定义,RxJava是一种用于异步编程和可观察数据流的API。其核心特性在于流式处理能力和丰富的操作符支持。 ... [详细]
author-avatar
PHP_sunshine
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有