Java引入包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突、类文件管理等问题。
Java允许将一组功能相关的类放在同一个package下,从而组成逻辑上的类库单元。如果希望把一个类放在指定的包结构下,我应该在Java源程序的第一个非注释行放置如下格式的代码:
package packagename;
一旦在Java源文件中使用了这个package语句,就意味着该源文件里定义的所有类都属于这个包。位于包中的每个类的完整类名都应该是包名和类名的组合,如果其他人需要使用该包下的类,也应该使用包名加类名的组合。

javac -d . Hello.java 与 javac Hello.java 的区别?

package lee;
public class Hello
{
  public static void main(String[] args)
  {
  System.out.println("Hello World!");
  }
}
-d选项本来用于设置编译生成的class文件的保存位置,这里指定将生成的class文件放在当前路径下。使用该命令编译后,当前路径下生成一个名为lee的文件夹,该文件夹下则有一个Hello.class文件。
如果直接使用javac Hello.java命令编译,将会在当前路径下生成一个Hello.class文件,而不会生成lee文件夹。

同一个包中的类必须位于同一个文件夹吗?

可以不在同一个文件夹。例如lee.Person和lee.PersonTest两个类可一个在C盘一个在D盘,只要让CLASSPATH环境变量包含这两个路径即可。

包名如何起?

包名一般全是小写字母,由一个或多个有意义的单词连缀而成。为了在开发中避免包名和类名同时重复的情况,Oracle建议使用公司Internet域名倒写来作为包名,例如Internet域名是crazyit.org,则该公司的所有类都放在org.crazyit包及其子包下。
域名倒写.项目名.模块名.组件名

同一个包下的类互相访问时可以不加包前缀吗?
可以。

父包和子包互相访问时可以不加包前缀吗?
不可以,必须加包前缀。

import关键字

正如上面看到的,如果需要使用不同包中的其他类时,总是需要使用该类的全名,这是一件繁琐的事情。为了简化编程,Java引入了import关键字,import关键字可以向某个java文件只能给导入指定包层次下的某个类或全部类,import语句应该出现在package语句之后、类定义之前。一个Java源文件只能包含一个package语句,但可以包含多个import语句,多个import语句用于导入多个包层次下的类。

导入单个类:import package.subpackage...ClassName;
导入全部类:import package.subpackage...*;

上面的(*)只能代表类,不能代表包。

Java的常用包

Java的核心类都放在java这个包及其子包下,Java扩展的许多类都放在javax包及其子包之下。这些实用类也就是前面所说的API(应用程序接口),Oracle按这些类的功能分别放在不同的包下。下面几个包是Java中的常用包。

java.lang:这个包下包含了Java语言的核心类,如Sting、Math、System、和Tread类等,使用这个包下的类无需使用import语句导入,系统会自动导入这个包下的所有类。
java.util:这个包下包含了Java的大量工具类/接口和集合框架类/接口,例如Arrays和List、Set等。
java.net:这个包下包含了一些Java网络编程相关的类/接口。
java.io:这个包下包含了一些Java输入/输出相关的类/接口。
java.text:这个包下包含了一些Java格式化相关的类。
java.sql:这个包下包含了一些Java进行JDBC数据库编程相关的类/接口。
java.awt:这个包下包含了抽象窗口工具集(Abstract Window Toolkits)的相关类/接口,这些类主要用于构建图形用户界面(GUI)程序。
java.swing:这个包下包含了Swing图形用户界面编程的相关类/接口,这些类可用于构建平台无关的CUI程序。

Java package详解的更多相关文章

  1. C++调用JAVA方法详解

    C++调用JAVA方法详解          博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...

  2. Java Annotation详解 理解和使用Annotation

    系统中用到了java注解: 查了一下如何使用注解,到底注解是什么: (1)创建方法:MsgTrace Java Class==> 在Create New Class中: name:输入MsgTr ...

  3. 【转】Java内部类详解

    一.内部类基础 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.下面就先来了解一 ...

  4. Java IO 详解

    Java IO 详解 初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正, ...

  5. java关键字(详解)

    目录 1. 基本类型 1) boolean 布尔型 2) byte 字节型 3) char 字符型 4) double 双精度 5) float 浮点 6) int 整型 7) long 长整型 8) ...

  6. Java泛型详解(转)

    文章转自  importNew:Java 泛型详解 引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理 ...

  7. Java接口 详解(二)

    上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...

  8. Java ClassLoader详解(转载)

    Java ClassLoader详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK ...

  9. 【Java_基础】Java内部类详解

    1.四种内部类 java中的四种内部类:成员内部类.静态内部类.局部内部类和匿名内部类.其中匿名内部类用到的最多. 1.1.成员内部类 若一个类定义在另一个类的内部作为实例成员,我们把这个作为实例成员 ...

随机推荐

  1. JSAPI_Ticket签名

    1.微信 JS 接口签名校验工具 2.具体开发 2.1 获取access_token,然后jsapi_ticket /** * 获取access_token,然后jsapi_ticket */ pri ...

  2. hdu 4857 逃生

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4857 逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能 ...

  3. hdu 3172 Virtual Friends

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=3172 并查集的运用... #include<algorithm> #include< ...

  4. SQL 执行顺序

    SQL 是一种声明式语言,与其他语言相比它的最大特点是执行顺序-并非按照语法顺序来执行.因此很多程序猿看到SQL就头疼,我之前也是这样,后来看到一篇文章后豁然开朗-地址. 理解了SQL的执行顺序无疑对 ...

  5. Android BLE API: GATT Notification not received

    When setting the value to the descriptor instead of putting descriptor.setValue(BluetoothGattDescrip ...

  6. Linux下各硬件装置的文件名

    Linux对计算机各组件/装置的分辨,是和Windows系统完全不一样的!因为各个组件/设备在Linux上都是一个文件!因此,我们在认识各项设备时一定要学习Linux的设备文件名. 众所周知,Linu ...

  7. “我爱淘”冲刺阶段Scrum站立会议7

    完成任务: 大事不好,今天的任务还没有完成,没有通过xml文件通过服务器显示到软件中. 计划任务: 实现通过服务器将xml文件中的数据显示到软件中. 遇到问题: 服务器已经配好,并且解析xml文件的代 ...

  8. 前端之JavaScript第一天学习(3)-JavaScript输出

    JavaScript 通常用于操作 HTML 元素. 操作 HTML 元素 如需从 JavaScript 访问某个 HTML 元素,您可以使用 document.getElementById(id) ...

  9. 删除vlan的方法

    方法一: 删除VLAN     先删接口     switch(config)#int ra f0/1 - 5     switch(config-if)#no switchport access v ...

  10. 剑指offer--面试题21

    题目:设计包含min函数的栈,pop(),push(),min()的时间复杂度均为O(1) 自己所写代码如下:(写‘栈’的代码还是有些不熟练!) #include <iostream> u ...