Java包与Import导入

包的概念


 包是Java语言提供的一种确保类名唯一性的机制,是类的一种组织和管理方式、是一组功能相似或相关的类或接口的集合。

  1. 一个完整的类名是包名+类名,在没有import导入的情况下,使用一个类需要给出完整的类名,如java.util.Date。为了方便,Java自动导入两个包:java.lang包和默认包。
  2. 无包的类可以访问有包的类, 直接导入即可;有包的类无法访问无包的类, 直接访问是访问同一个包中的, 而有包的类与无包的类不在一个包里。由于使用不同包中的类需要导入, 而无包的类因无包名无法导入;
  3. Java的包表面上看(从路径上看)是有等级的,但实际上并没有,比如java.awt,java.awt.color是两个地位相同的包。java.awt.color并不属于java.awt。
  4. 在采用类名方式使用一个类的时候, 先在当前包中查找是否有这个类, 如果没有才去导入的包中找。

 

包的作用


  1. 方便组织自己的代码,并将自己的代码与别人提供的代码库分开管理。
  2. 将相关联的接口和类集合到一块。比如,package graphics; 就把图形处理相关的模块放到了一起。便于使用。
  3. 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
  4. 实现了外界对包的访问控制。 需要先进行导入。
     

定义包


 要想将一个类放入一个包中,必须在源文件中除注释以外的第一行使用package+包名语句。同时将属于包的文件放在与完整的包名匹配的子目录中。当需要调用此包中的类时,就可以使用关键字import进行导入。如果源文件中没有使用package语句,这个源文件中的类就会被放置在一个默认包(default package)中。默认包是一个没有名字的包。

一、在定义包的时候,应该注意几点:

  1. 为了尽量使包名保持唯一性,包名通常采用小写、按倒写因特网域名的形式进行定义。
  2. 在进行命名包时,应该避免使用与系统发生冲突的名字。
  3. 一个源文件只能有一个package语句,放在源文件第一行,import语句前。
  4. 自定义包可以以java开头。
     

编译和运行


一、编译带包的类:

javac -d 目录 源文件名.java
注:在使用命令javac –d 之前,必须先创建好包路径,因为该命令不会自动创建文件夹。

二、运行带包的类:

java 包名.类名

 

使用包


 同个包的类之间访问比较简单,在代码中直接使用类名;而不同包之间的访问则必须满足一个条件:一个类如果希望被其他包中的类访问, 那么必须加上public修饰(注意:用public修饰的类必须和源文件名同名)。
一、不同包之间的使用通常有以下3种方法:只能导入public修饰的类

  1. 使用全名访问类;
  2. import 该类;
  3. import 包含该类的整个包;
     

常用的包


  1. Java.lang包:java的核心类库,包含了运行java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省(默认)加载这个包。
  2. java.util包:Java的实用工具类库。在这个包中,Java提供了一些实用的方法和数据结构。例如,Java提供日期(Data)类、日历(Calendar)类来产生和获取日期及时间,提供随机数(Random)类产生各种类型的随机数,还提供了堆栈(Stack)、向量(Vector) 、位集合(Bitset)以及哈希表(Hashtable)等类来表示相应的数据结构。
  3. java.io包:java语言的标准输入/输出类库,如基本输入/输出流、文件输入/输出、过滤输入/输出流等。
  4. java.util.zip包:实现文件压缩功能。
  5. java.lang.reflect包:提供用于反射对象的工具。
  6. java.mah:如提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。
  7. java.net包:用来实现网络功能的类库。如Socket类、ServerSocket类。
  8. java.awt包:构建图形用户界面(GUI)的类库。提供的类如:低级绘图操作Graphics类,图形界面组件和布局管理如 Checkbox类、Container类、LayoutManager接口等,以及用户界面交互控制和事件响应,如Event类。
  9. java.awt.event包:GUI事件处理包。
  10. java.awt.image包:处理和操纵来自于网上的图片的java工具类库。
  11. java.sql包:实现JDBC的类库。
  12. java.applet包:编写java applet程序用的。
     

import


一、当导入的两个包中有相同的类名时,如果继续采用缩写,就会出现“The type xxx is ambiguous”问题。这时,你就要使用这个类的全名。比如,java.util、java.sql包中都有Date类,程序又同时导入了这两个包中的Date类。解决办法如下:

import java.sql.*;
import java.util.*;
import java.util.Date;  //明确导入一下

二、静态导入,导入静态域和静态方法。

导入特定的静态域或静态方法
import static java.lang.Math.PI;
import static java.lang.Math.cos;
public class Test {
	public static void main(String[] args) {
	        //以下几种调用方式都可以
		    double r = Math.cos(Math.PI * 2);//1.0
			double r1 = Math.cos(PI * 2);//1.0
			double r2 = cos(PI * 2);//1.0
	}
}
导入全部的静态域和静态方法:
import static java.lang.Math.*;

过度使用静态导入会导致代码难以阅读和维护,因为阅读者不知道某个特定的静态对象是属于哪个类的。 但恰当地使用静态导入,代码可以因为不用繁琐地写全名而更具可读性。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值