Java包的作用-小白入门讲解(文末配讲解视频)

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

包的作用,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盘的根目录。

8efb488a97089861dedf9f2da18fdd53.png

步骤 2 StringUtil

a989444044f43b95aa209dae033b3779.png

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

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

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

1e9445f7a288314eec4466dfa83c7a97.png

步骤 3 目前的情况

目录结构是这样的:

4dcd79a192429db02802c8c463a59272.png

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

修改Demo.java

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

编译代码:

fa74e6b8050d0f7148204116ec705821.png

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

步骤 4 CLASSPATH


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


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


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

a2a0767bda47aa8cab0b6893ce9419c5.png


步骤 5 具体配置

cb021954e16c08a0b521e5e4a87a749e.png


我们一般都是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盘,直接输入命令。

4df163fc8ce5ec9de8447f2fb2a5a127.png

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

这下,就很清楚了吧。


步骤 8 亲自做一遍

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


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

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

e2c74b94f2181036500300237ce94983 (1).png


原因很简单,因为你加了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/



相关文章
|
1月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第17天】本文详细介绍了Java编程中Map的使用,涵盖Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的并发处理和性能优化技巧,适合初学者和进阶者学习。
50 3
|
12天前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin
|
18天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
24天前
|
存储 安全 Java
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
65 5
|
21天前
|
安全 Java 调度
Java中的多线程编程入门
【10月更文挑战第29天】在Java的世界中,多线程就像是一场精心编排的交响乐。每个线程都是乐团中的一个乐手,他们各自演奏着自己的部分,却又和谐地共同完成整场演出。本文将带你走进Java多线程的世界,让你从零基础到能够编写基本的多线程程序。
32 1
|
28天前
|
Java 数据处理 开发者
Java多线程编程的艺术:从入门到精通####
【10月更文挑战第21天】 本文将深入探讨Java多线程编程的核心概念,通过生动实例和实用技巧,引导读者从基础认知迈向高效并发编程的殿堂。我们将一起揭开线程管理的神秘面纱,掌握同步机制的精髓,并学习如何在实际项目中灵活运用这些知识,以提升应用性能与响应速度。 ####
44 3
|
29天前
|
Java
Java中的多线程编程:从入门到精通
本文将带你深入了解Java中的多线程编程。我们将从基础概念开始,逐步深入探讨线程的创建、启动、同步和通信等关键知识点。通过阅读本文,你将能够掌握Java多线程编程的基本技能,为进一步学习和应用打下坚实的基础。
|
1月前
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
51 1
java制作游戏,如何使用libgdx,入门级别教学
|
1月前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
45 4
|
30天前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
23 1
下一篇
无影云桌面