Java 包(package)

一、包的概述:(什么是包?)

开始之前还是得说个例子!

假如有很多Person类,有的有名字有性别,有的又只有名字,那我是不是代码删了写,写了又删?有没有办法这个同样的Person类都存在呢?那有人一激灵说这还不好说,多建几个类不就好了?而File already exists?什么意思?文件已经存在!

我们发现电脑上两个相同的文件放在一起是不是会提示是否要覆盖?那你如果不覆盖,只能改名字了。还有个方法,就是放在不同文件夹中,是不是?

同理java项目中也是可以分不同文件夹的。只不过java中类的文件夹不叫文件夹,叫“包名”

英文单词:package,那package还有个意思就是打包的意思,所以你可以理解为这个文件夹,就是打了一个包裹,就跟快递包裹似的,你买了好多东西,不同商家是不同的包裹,每个包裹放的东西是不同类别的。

java中也是这个意思,包中放的基本上都是同一类的东西。比如放汽车类,有Car,有Bus,有MiniBus,有Taxi是不是

好了,说这么多,其实就是一个文件夹而已!记住在Java中叫做包。

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

包的作用(对类进行分类管理

  • 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
  • 2 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
  • 3 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

二、创建包(如何创建包?)

在Java项目中,每一个包中的文件,都要有相应的包声明;

在Java文件中,声明一个包需要注意:

1、声明一个包使用关键字:package;

2、一个类中,包的声明必须放在类中第一行;

3、包名也是标识符全部都是小写,多级之间使用.隔开;一般为了避免包名重复,都是公司域名反转加项目名加模块名

首先命名规范:

1、不同路径通过点 (.) 来分割,比如这个目录/cn/craaaaazy,包名的话就是cn.craaaaazy

2、由字母、数字下划线组成,不能以数字开头

3、全部小写

4、一般使用域名反写来命名包,为了保证包名唯一性,一般是用域名反写来做包名的。cn.craaaaazy其实是两个文件夹,一个是cn,另外一个文件加是craaaaazy,那你去这个项目目录看,其实是两个文件夹。

例如,一个Something.java 文件它的内容

package net.java.util
public class Something{...
}

那么它的路径应该是 net/java/util/Something.java 这样保存的。 package(包)的作用是把不同的java程序分类保存,更方便的被其他java程序调用。

那说了这么半天,怎么用呢?(如何带包编译和运行?)

带包的编译和运行:
        手动式(麻烦)
            a:编写一个带包的java文件。
            b:通过javac命令编译该java文件。
            c:手动创建包名。(注意路径)
            d:把b步骤的class文件放到c步骤的最底层包(即文件)
            e:回到和包根目录在同一目录的地方,然后运行
                带包运行

如果按照以前的方法直接编译和运行,如下显示会报错:

所以通过手动,按照上面方法步骤进行,如下:

手动式添加包名路径(相当文件夹路径),路径如a/b/c/d/e/f/.......等等,比较麻烦,所以就有第二种方法。

自动式
            a:编写一个带包的java文件。
            b:javac编译的时候带上-d即可
                javac -d . HelloWorld.java       (注意:点 . 前后之间有空格符)
            c:回到和包根目录在同一目录的地方,然后运行
                带包运行

三、不同包中的类之间的访问

1、通过带包名的完整路径访问。

这里以两个简单的带不同包的类为例,.java文件源代码如下:

//Test.java文件package cn.itcast;class Test {public static void main(String[] args) {Demo d = new Demo();System.out.println(d.sum(10,20));}
}
/Demo.java文件package com.wen;public class Demo {public int sum(int a,int b) {return a + b;}
}

如果在当前的test路径下直接运行Test.java文件,则会报错。原因是在Test.java中找不到符合Demo

Test.java:7: 错误: 找不到符号Demo d = new Demo();^符号:   类 Demo位置: 类 Test
Test.java:7: 错误: 找不到符号Demo d = new Demo();^符号:   类 Demo位置: 类 Test
2 个错误

修改Test.java中代码如下:

//Test.java文件package cn.itcast;class Test {public static void main(String[] args) {//Demo d = new Demo();com.wen.Demo d = new com.wen.Demo();System.out.println(d.sum(10,20));}
}

显示报错如下,发现没有包,所以呢安装上面的方法分别创建包。(选择自动式创建:javac -d . XXXXX.java)

Test.java:8: 错误: 程序包com.wen不存在com.wen.Demo d = new com.wen.Demo();^
Test.java:8: 错误: 程序包com.wen不存在com.wen.Demo d = new com.wen.Demo();^
2 个错误

之后运行时,注意要带包路径运行(这里是:java cn.itcast.java)  。过程大致如下:

然而,上面的方法虽然可以,如果其中的代码调用很多呢?那岂不是很麻烦,得重复操作。例如:

package cn.itcast;class Test {public static void main(String[] args) {//Demo d = new Demo();com.wen.Demo d = new com.wen.Demo();System.out.println(d.sum(10,20));com.wen.Demo d = new com.wen.Demo();System.out.println(d.sum(10,20));com.wen.Demo d = new com.wen.Demo();System.out.println(d.sum(10,20));com.wen.Demo d = new com.wen.Demo();System.out.println(d.sum(10,20));//...}
}

所以引入第二种方法。

2、通过导包来访问(通过import 导入完整的类路径)<到类>

如果一个类中要使用其它包中的类,而且不止使用一次,通过上面的方式就比较麻烦,应该通过导包的方式来解决问题;

  • 导包需要使用关键字:import
  • 导包的位置:在包声明(package)下面,类(class)上面
  • 导包的格式:import 完整包名.类名;

3、通过import 导入包路径(到包)(通用符)

比如你使用了某个包的所有类,你可以这样写

import cn.craaaaazy.fruit.*;

那cn.craaaaazy.fruit是一个包名,这个包中存放了所有的水果类,如果我都要用,那我得一个一个把类导入进来(在以前没有自动导入这么强大的编辑工具的时候,工作是相当乏味的!)

那如果不一个一个导入进来就需要使用通配符了,这个通配符就是星号(*)。这样一个是省去了很多麻烦,另外也降低了代码量。

注意:一般不推荐使用通用符,我们用什么就导入什么。

小知识点:

package,import,class有没有顺序关系?    有
        package > import > class
        
        Package:只能有一个
        import:可以有多个
        class:可以有多个,以后建议是一个

Java 包(package)使用相关推荐

  1. Java包(package)

    Java包package 1.包的概念 2.包的定义 3.常见包 4.包的引入 1.包的概念 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 包的作用: 把功能相似或相关的类或接口 ...

  2. java包(package)的声明与访问

    包的概念 java的包,其实就是我们电脑系统中的文件夹,包里存放的是类文件. 当类文件很多的时候,通常我们会采用多个包进行存放管理他们,这种方式称为分包管理. 在项目中,我们将相同功能的类放到一个包中 ...

  3. Java 包(package)

    为了更好地组织类,Java提供了包机制,用于区别类名的命名空间. 包的作用 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2 如同文件夹一样,包也采用了树形目录的存储方式.同一 ...

  4. 【java】Java 包(package)

    文章目录 包的作用 创建包 import 关键字 package 的目录结构 设置 CLASSPATH 系统变量 系统包 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 包的作用 ...

  5. Java中的包(package)详情解释

    一.Java 包(package) 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 包的作用 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一 ...

  6. 什么是java包?java包作用是什么?

    在Java中的包是一种封装一组类.子包和接口的机制,可用于组织一组相关的类和接口.那么具体什么是java包?java包作用是什么?本篇来简单解答下. 什么是java包? Java 包(package) ...

  7. Java的类(class)、包(package)和接口(interface)

    在Java中,类(class)是用来代表对象的基本单元.对象(object)可以是现实世界中的任何一个实体,它具有若干区别于其它对象的属性和操作.而类则通过为对象定义属性和操作来概括一类实体.它封装了 ...

  8. java package 目录_修改jar包package目录结构操作方法

    本文将为您描述修改jar包package目录结构操作方法,具体操作过程: 开发中会遇到用第三方的jar包,有时候会出现不同的jar包,包名一致的情况,这就会引发运行时异常,找不到相应的jar包. 这种 ...

  9. java从包package中获取所有的Class

    1.从包package中获取所有的Class方法: /** * 从包package中获取所有的Class * @param pack * @return */ public static List&l ...

最新文章

  1. 互联网协议 — Ethernet — 冲突域、广播域
  2. 以下用于数据存储领域的python第三方库是-Python3爬虫学习之MySQL数据库存储爬取的信息详解...
  3. Linux中的Screen命令使用技巧详解
  4. 当前的三种构件标准规范
  5. 吴恩达机器学习(第五章)——Logistic回归
  6. 使用nhmicro提供的micro-datasource嵌入式的解决微服务架构中分布式事务问题
  7. ASP.NET图片上传(配合jquery.from.js 插件)
  8. [BZOJ4182]Shopping
  9. python高维数据_t-SNE高维数据可视化(python)
  10. 34步优化sql语句
  11. webpack-工程化工具
  12. python数字图像处理(10):图像简单滤波
  13. Maven 常用仓库网址
  14. 键盘 计算机代码,键盘钩子示例
  15. 趣味项目—MyQQ机器人(一)
  16. ARM GIC(六) GIC V3 电源/功耗管理 分析笔记。
  17. web文件管理系统_实用开源项目,基于Web的文件管理系统——DocSys
  18. 图文详解 MapReduce 工作流程
  19. 导轮式机器人_一种轮式机器人底盘的制作方法
  20. Codeforces 407C--Curious Array

热门文章

  1. Win10鼠标指针大小和颜色调整
  2. C++ 不定参宏展开
  3. 天肌1300和高通骁龙778g参数对比 天肌1300和骁龙778g哪个好
  4. Rust系列(2):样样精通的Rust与其内功心法(上)
  5. 基于神经网络的人工智能,人工智能的实现路径是
  6. [译] 保护我们的 Git Repos,立刻停止“狐步舞”
  7. halcon第二次尝试以颜色识别为主提取蓝底白字的车牌号码
  8. .NET通用作业批改系统源码分享
  9. 什么是报文?报文有哪些作用?
  10. 带你探索400G光模块测试