为了使类型更易于查找,避免命名冲突和访问控制,我们应该使用包来对自己定义的类型进行管理。这里说的类型可以是类、接口、枚举和注解(枚举和注解的内容会在后续教程中介绍)。使用包来管理我们的代码,有以下几个目的:

  • 便于查找:将相似或相关的类型放在同一个包下,项目整体的结构更加清晰,同时也有助于自己和其他人在使用时可以轻松地找到对应的类型。
  • 避免命名冲突:如果自己代码中的类型与其他已经存在的类型同名,使用包来创建新的命名空间可以避免命名冲突。
  • 访问控制:对于使用public修饰的类型来说,在本包或其他包中都可以使用这个类型;对于没有使用访问修饰符的类型来说,则只能在本包中进行访问,其他包中的类型则无法访问。

1.包的命名规则

  包的命名满足以下规则:

  1. 包名建议全部小写,以避免与类或接口的名称冲突;
  2. 父包和子包之间使用点(.)隔开;
  3. 建议将公司的互联网域名以逆序的形式作为包名,例如某公司的域名为example.xyz,则mypackage包的命名为xyz.example.mypackage;

2.将类型放入包中

  要想将一个类型放进包中,首先需要在源文件中使用package语句。package语句的语法是package关键字后面跟上这个类型所在的包。这条语句要放在源文件的开头,例如:

package xyz.example.mypackage;

public class Demo {
...
}

  如果没有在源文件中添加package语句,这个类型就被放在一个默认包中。一般来说,不推荐使用默认包,建议将每一个自己定义的类型都放在对应的包中。

  将一个类型放进包中不但要在源文件中使用package语句,还要将源文件放在与包名匹配的目录中。例如,xyz.example.mypackage包中的源文件应该被放置在目录xyz/example/mypackage中。

3.使用包中的类型

(1)使用完整的包名

  在要使用的类型前加上完整的包名,就可以在程序中使用这个类型了,例如:

java.util.List<String> list = new java.util.ArrayList<>();

(2)导入类型

  在每个类型前使用完整的包名显然很繁琐,更常用的方式是使用import语句。在import关键字后面跟上具体类型的完整路径即可将该类型导入当前源文件。例如,上面的例子可以写成:

import java.util.List;
import java.util.ArrayList;
...
List<String> list = new ArrayList<>();

(3)导入整个包

  还可以使用import导入某个包下所有的类型。就像下面这样:

import java.util.*;

  需要注意的是,*代表该包下所有的类型,但不包括子包。如果要导入子包或子包中的类型,则需要另外的import语句。

(4)静态导入

  import语句不仅可以导入类型,还可以导入静态方法和静态域。例如,如果在源文件的顶部添加一条语句:

import static java.lang.System.out;

就可以使用System类的静态方法和域,而不必加类名前缀:

out.println("Hello, World!");

Java基础教程(13)--包的更多相关文章

  1. Java基础教程(18)--继承

    一.继承的概念   继承是面向对象中一个非常重要的概念,使用继承可以从逻辑和层次上更好地组织代码,大大提高代码的复用性.在Java中,继承可以使得子类具有父类的属性和方法或者重新定义.追加属性和方法. ...

  2. Java基础教程(12)--深入理解类

    一.方法的返回值   当我们在程序中调用方法时,虚拟机将会跳转到对应的方法中去执行.当以下几种情况发生时,虚拟机将会回到调用方法的语句并继续向下执行: 执行完方法中所有的语句: 遇到return语句: ...

  3. Java基础教程:注解

    Java基础教程:注解 本篇文章参考的相关资料链接: 维基百科:https://zh.wikipedia.org/wiki/Java%E6%B3%A8%E8%A7%A3 注解基础与高级应用:http: ...

  4. Java基础教程:网络编程

    Java基础教程:网络编程 基础 Socket与ServerSocket Socket又称"套接字",网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个s ...

  5. Java基础教程:面向对象编程[2]

    Java基础教程:面向对象编程[2] 内容大纲 访问修饰符 四种访问修饰符 Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java 支持 4 种不同的访问权限. default ...

  6. Java基础教程:JDBC编程

    Java基础教程:JDBC编程 1.什么是JDBC JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. JDBC A ...

  7. Java基础教程(25)--I/O

    一.I/O流   I/O流表示输入源或输出目标.流可以表示许多不同类型的源和目标,例如磁盘文件.设备.其他程序等.   流支持许多不同类型的数据,包括字节.原始数据类型.字符和对象等.有些流只传递数据 ...

  8. Python 基础教程之包和类的用法

    Python 基础教程之包和类的用法 建立一个文件夹filePackage 在filePackage 文件夹内创建 __init__.py 有了 __init__.py ,filePackage才算是 ...

  9. Java基础教程:枚举类型

    Java基础教程:枚举类型 枚举类型 枚举是将一具有类似特性的值归纳在一起的方法.比如,我们可以将周一到周日设计为一个枚举类型.彩虹的七种颜色设计为一个枚举类型. 常量实现枚举 我们通过定义常量的方式 ...

随机推荐

  1. 在sqlite中,如何删除字段? how to drop a column in sqlite

    在sqlite中可以使用ALTER TABLE语法对表结构进行修改,从官方的文档说明中,语法如下图: 从图中可以看出,ALTER TABLE仅仅支持表名重命名,添加字段,却没有删除字段的方法.那么该如 ...

  2. 机器学习、深度学习、和AI算法可以在网络安全中做什么?

    本文由  网易云发布. 本文作者:Alexander Polyakov,ERPScan的首席技术官和联合创始人.EAS-SEC总裁,SAP网络安全传播者. 现在已经出现了相当多的文章涉及机器学习及其保 ...

  3. day 82 Django Admin组件.

    一.先建表环境 modules文件 from django.db import models # Create your models here. from django.contrib.auth.m ...

  4. hdu5833----高斯消元

    题目大意: 给你n个整数,从中选一些数,他们的乘积为一个完全平方数 问有多少种这样的方式,已知这些数的素因素不超过2000. 思路: 一个完全平方数素因素的个数肯定是偶数个. 我们只要从n个数中选取所 ...

  5. Debian&&ubuntu系安装MegaCli

    MegaCli这个命令可以用来监控raid状态.磁盘状况等,最近上了一批ubuntu系统跑openstack,问题是MegaCli在官网上只有rpm格式的包,没有deb的包,但是还是有办法解决的,rp ...

  6. RabbitMQ - Start Up

    开始之前 rabbitmq是一个被广泛使用的消息队列,它是由erlang编写的,根据AMQP协议设计实现的. AMQP的主要特征是面向消息.队列.路由(包括点对点和发布/订阅).可靠性.安全. Rab ...

  7. Python小白学习之路(八)—【变量】【基本数据类型分类】【集合】【集合的功能】

    一.变量 变量的作用:记录状态的变化变量的值:描述不同的状态 二.五大基本数据类型的分类 五大基本数据类型(数字 字符串 列表 元祖 字典) 按照可变不可变来进行分类 可变:列表.字典 不可变:字符串 ...

  8. Java并发编程实践读书笔记(5) 线程池的使用

    Executor与Task的耦合性 1,除非线程池很非常大,否则一个Task不要依赖同一个线程服务中的另外一个Task,因为这样容易造成死锁: 2,线程的执行是并行的,所以在设计Task的时候要考虑到 ...

  9. php的GC机制

    在php5.3版本之前, php变量的回收机制只是简单的通过计数来处理(当refcount=0时,会回收内存),但这样会出现一个问题 $a=array("str"); $a[]=& ...

  10. easyui tree扩展tree方法获取目标节点的一级子节点

    Easyui tree扩展tree方法获取目标节点的一级子节点 /* 只返回目标节点的第一级子节点,具体的用法和getChildren方法是一样的 */ $.extend($.fn.tree.meth ...