Java小白翻身教程-包的作用

简介: Java小白翻身教程-包的作用

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


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

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


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


24.png

步骤 2  StringUtil

35.png


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

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

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


36.png

# 步骤 3  目前的情况

目录结构是这样的:

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

修改Demo.java

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


编译代码:

32.png


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


# 步骤 4  CLASSPATH


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


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


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


31.png


# 步骤 5  具体配置

30.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盘,直接输入命令。

37.png


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


这下,就很清楚了吧。


# 步骤 8  亲自做一遍


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


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


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


38.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来分类,那这个项目还怎么维护啊?


相关文章
|
13天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
28天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
123 26
|
1月前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
1月前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
2月前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
36 2
|
1月前
|
Java 数据库连接 编译器
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
Kotlin教程笔记(29) -Kotlin 兼容 Java 遇到的最大的“坑”
55 0
|
2月前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
15 0
|
8月前
|
Java
java面向对象——包+继承+多态(一)-2
java面向对象——包+继承+多态(一)
50 3
|
8月前
|
SQL Java 编译器
java面向对象——包+继承+多态(一)-1
java面向对象——包+继承+多态(一)
44 2
|
存储 Java C语言
Java面向对象进阶5——包和final(含源码阅读)
包在操作系统中其实就是一个文件夹。包是用来分门别类的管理技术,不同的技术类放在不同的包下,方便管理和维护
108 0
Java面向对象进阶5——包和final(含源码阅读)