java编程小白进阶包的作用详解
作者:spring小杨 发布时间:2022-01-22 05:15:24
包的作用,1是为了防止类和方法的重名,2是为了管理众多的java类。
步骤 1 工具包里面有很多个工具类
之前讲了打印数据的方法:System.out.println,写这么多字有点麻烦啊。那么我们不妨创建一个StringUtil,Util是工具的意思,里面设计一个newLine方法,用于字符串的打印。
StringUtil是一个工具类,应该放在一个叫做tool的工具包里面。这个tool就是一个文件夹,我暂时把它创建在D盘的根目录。
步骤 2 StringUtil
创建一个StringUtil.java,不必考虑编码的问题,现在肯定是ANSI,其实就是GBK,除非你用的系统不是简体中文。反正它是支持中文的,用Editplus打开,敲入以下的代码:
class StringUtil
{
public static void newLine(String msg){
System.out.println(msg);
}
}
用javac去编译它,得到.class文件。
步骤 3 目前的情况
目录结构是这样的:
我们的程序在java18文件夹,现在想要调用tool文件夹中的StringUtil里面的newLine方法。
修改Demo.java
class Demo {
public static void main(String[] args){
StringUtil.newLine("StringUtil -> newLine");
}
}
编译代码:
说是找不到符号,也难怪,JVM怎么知道有一个StringUtil类呢?
步骤 4 CLASSPATH
如果你学过java,有一定的Java基础,那么你一定知道CLASSPATH的大名。所谓的CLASSPATH,是class和path两个单词,表示“类路径”。就是你告诉JVM,哪些文件夹是我存放类(class文件)的路径。
这个玩意,也是需要配置环境变量的,还记得配置JDK环境变量的步骤吗?
现在来配置CLASSPATH环境变量,如果不记得,可以回去看下之前的章节。
步骤 5 具体配置
我们一般都是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盘,直接输入命令。
tool.StringUtil,这个“.”很有灵性,JVM会把“.”翻译成\。
因为CLASSPATH里面有D:\,所以最终找到的位置是:D:\tool\StringUtil
这下,就很清楚了吧。
步骤 8 亲自做一遍
强烈建议把上面的实验自己做一遍,我相信很多人都不注重这个原理,因为IDEA真香。但是吧,身为程序员,还是要知道一点的,以后出去吹牛逼也有东西不是?
步骤 9 为什么现在用Editplus运行报错了?
你可以试一下,在Editplus里面运行StringUtil,会报错的。
原因很简单,因为你加了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来分类,那这个项目还怎么维护啊?
来源:https://blog.csdn.net/weixin_39570751/article/details/118615854


猜你喜欢
- 使用 Spring 时,XML 和注解是使用得最多的两种配置方式,虽然是两种完全不同的配置方式,但对于 IOC 容器来说,两种方式的不同主要
- 一、SpringBoot 指定配置文件路径:在 SpringBoot 中,可以将配置文件放在 jar 包外面,这样可以方便地修改配置而不需要
- 需求:学生输入姓名和语文、数学、英语,编程求出总分和平均分,并在屏幕上显示XX的总分和平均分using System;using Syste
- [LeetCode] 131.Palindrome Partitioning 拆分回文串Given a string s, par
- springboot整合MySQL很简单,多数据源就master,slave就行了,但是在整合DB2就需要另起一行,以下是同一个yml文件先
- 文件存储文件存储方式不受类型限制,可以将一些数据直接以文件的形式保存在设备中,例如文本文件、PDF ,音频,图片等。存储类型复杂的数据时,通
- spring in action第三版读书笔记spring3.0引入了spring expression language(spel)语言,
- 题目题目要求思路:模拟用一个哈希表记录可出现的字母,然后逐一遍历每个单词每个字母,符合条件则结果加一。Javaclass Solution
- 前言又没什么好的思路,还是随便写一些,所以这次就来整点活。我们都知道Activity的跳转拥有默认的跳转动画,或者把这个默认的动画给取消,就
- 读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相应的锁即可。如果你的代码只读数据,可以很多人同时
- 概述java.util.Random可以产生int、long、float、double以及Goussian等类型的随机数。这也是它与java
- 一、Stream流简单示例需求:按照要求集合创建和遍历创建一个结合,存储多个字符串元素把集合中所有以"张"开头的元素存储
- 一般而言在Android上使用JAVA实现彩图转换为灰度图,与J2ME上的实现方法类似,不过遇到频繁地转换或者是大图转换时,就必须使用NDK
- 本文实例讲述了JAVA过滤标签实现将html内容转换为文本的方法。分享给大家供大家参考,具体如下:/*** 把html内容转为文本* @pa
- 我们就把这个问题叫做图片查看器吧,它的主要功能有:1、双击缩放图片。2、 双指缩放图片。3、单指拖拽图片。为此这个图片查看器需要考虑以下的技
- 1.第一种方式采用System.Net.Dns的GetHostAddress的方式,具体请看代码:/// <summary> &
- Android Fragment滑动组件ViewPager的实例详解1适配器FragmentPagerAdapter的实现对于Fragmen
- 一、HashMap概述HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键
- 扫雷游戏,大家都应该玩过吧!其实规则也很简单,可是我们想自己实现一个扫雷,我们应该怎么做呢?Step1: 知晓游戏原理扫雷就是要把所有非地雷
- 我也只是略懂皮毛,自己记录下方便以后看的,各位有任何高见烦请留言,谢谢,抱拳!想只复制值需要你的类实现ICloneable接口,并实现pub