Java package详解
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详解的更多相关文章
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- Java Annotation详解 理解和使用Annotation
系统中用到了java注解: 查了一下如何使用注解,到底注解是什么: (1)创建方法:MsgTrace Java Class==> 在Create New Class中: name:输入MsgTr ...
- 【转】Java内部类详解
一.内部类基础 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.下面就先来了解一 ...
- Java IO 详解
Java IO 详解 初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂.而且没有结合到java7 的最新技术,所以自己来整理一下,有错的话请指正, ...
- java关键字(详解)
目录 1. 基本类型 1) boolean 布尔型 2) byte 字节型 3) char 字符型 4) double 双精度 5) float 浮点 6) int 整型 7) long 长整型 8) ...
- Java泛型详解(转)
文章转自 importNew:Java 泛型详解 引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理 ...
- Java接口 详解(二)
上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...
- Java ClassLoader详解(转载)
Java ClassLoader详解 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行.类加载器从 JDK ...
- 【Java_基础】Java内部类详解
1.四种内部类 java中的四种内部类:成员内部类.静态内部类.局部内部类和匿名内部类.其中匿名内部类用到的最多. 1.1.成员内部类 若一个类定义在另一个类的内部作为实例成员,我们把这个作为实例成员 ...
随机推荐
- EMVTag系列1《数据分组》
数据分组的设计在个人化过程中承担着重要的作用.数据分组标识符(DGI)是两字节十六进制数.数据分组标识的第一个字节等于'01'到'1E',表明数据存储的SFI.第二个字节表明SFI记录的记录编号.其他 ...
- 关于Haproxy安装和配置:负载配置【haproxy.cfg】问题记录
1. 存放地址: more /etc/haproxy/haproxy.cfg ps -ef | grep haproxy 看看有没有haproxy的进程就是了 或者看看服务器的23306的端口有没有 ...
- Resource is out of sync with the file system
Resource is out of sync with the file system解决办法: 在eclipse或mycelipse中,启动run on server时或查看项目文件时报错:Res ...
- android bluetooth UUID蓝牙查询表
ServiceDiscoveryServerServiceClassID_UUID = '{00001000-0000-1000-8000-00805F9B34FB}' BrowseGroupDesc ...
- scjp考试准备 - 5 - 重载和重写
如下代码,在所指示的位置插入代码能够正常编译: class Alpha{ public void bar(int... x){}; public void bar(int x){}; } public ...
- shell 函数
1 shell函数的定义及其调用 shell函数有两种格式: function name { commands } name() { commands } 其中,name为函数名,commands为函 ...
- 霍夫变换(hough transform)
x-y轴坐标:y=kx+b k-b轴坐标:b=-xk+y θ-r轴坐标:
- ioctl和unlock_ioctl的区别
今天调一个程序调了半天,发现应用程序的ioctl的cmd参数传送到驱动程序的ioctl发生改变.而根据<linux设备驱动>这个cmd应该是不变的.因为在kernel 2.6.36 中已经 ...
- Lua利用cjson读写json示例分享
本文结合本人的实际使用经验和代码示例,介绍如何在Lua中对json进行encode和decode,需要的朋友可以参考下 我这里采用的是Lua CJson库,是一个高性能的JSON解析器和编码器,其性能 ...
- java类中定义接口
今天看到一个java类中定义了接口,写个备忘录,记录一下 package com.gxf.test; public class Test_interface { public interface sh ...