第21节 包和import语句

第21节 包和import语句

什么是包

包是Java语言中有效地管理类的一个机制。

包名的目的是有效的区分名字相同的类。不同Java源文件中两个类名字相同时,它们可以通过隶属不同的包来相互区分。

包语句

通过关键字package声明包语句。
package语句作为Java源文件的第一条语句,为该源文件中声明的类指定包名。

package语句的一般格式为:
package 包名;

例如:

package sunrise;
package sun.com.cn;    

有包的类的存储目录

如果一个类有包名,那么就不能在任意位置存放它,否则虚拟机将无法加载这样的类。程序如果使用了包语句,例如:package tom.jiafei;

那么存储文件的目录结构中必须包含有如下的结构
…\tom\jiafei

如: c:\1000\tom\jiafei

并且要将源文件编译得到的类的字节码文件保存在目录c:\1000\tom\jiafei中(源文件可以任意存放)。

运行有包名的主类

如果主类的包名是tom.jiafei,那么主类的字节码一定存放在…\tom\jiefei目录中,运行时必须到tom\jiefei的上一层(即tom的父目录)目录中去运行主类。

假设tom\jiefei的上一层目录是1000,那么,必须如下格式来运行:
C:\1000\java tom.jiafei.主类名

示例

建立一个主类Demo19

package com.blue;
public class Demo19 {
    public static void main(String[] args) {
        System.out.println("我的包名就是com.blue");
    }
}

怎样来编译运行这个主类
按照以前的方法,发现找不到这个class
这里写图片描述
回到tom\jiefei的上一层目录,依然运行Demo19,依然找不到
这里写图片描述
跟上完整的包名后
这里写图片描述
这样取不同的包名,在不同的目录下管理文件很麻烦,那如何在eclipse中快速的使用我们的包名呢?

建立Demo19主类,这里填写包名com.blue
这里写图片描述
可以发现,在目录下自动生成了包
这里写图片描述
编译成功
这里写图片描述

Import语句

一个类可能需要另一个类声明的对象作为自己的成员或方法中的局部变量,如果这两个类在同一个包中,当然没有问题。如果一个类想要使用的那个类和它不在一个包中,要使用import语句完成使命。

引入类库中的类

使用import语句可以引入包中的类。在编写源文件的时候,除了自己编写的类以外,经常需要使用Java提供的许多类,这些类可能在不同的包中。在学习Java语言时,使用已经存在的类,避免一切从头做起,这也是面向对象编程的一个重要方面。为了能够使用Java提供给我们的类,可以使用import语句引入包中类。在一个Java源程序中可以有多个import语句,它们必须写在package语句(假如有package语句的话)和源文件中类的定义之间。Java为我们提供了大约130多个包,比如:

java.lang 包含所有的基本语言类
javax.swing 包含抽象窗口工具集中的图形、文本、窗口GUI类
java.io 包含所有的输入输出类
java.util 包含实用类
java.sql 包含操作数据库的类
java.nex 包含所有实现网络功能的类
java.applet 包含所有实现Java applet的类

引入自定义包中的类

用户程序可以使用tom.jiafei包中的类
如:import tom.jiafei.*;
使用非类库中有包名的类,也要使用import语句。

使用无包名的类

之前,我们在源文件中一直没有使用包语句,因此各个源文件得到的类都没有包名。如果一个源文件中的类想使用无名包中的类,只要将这个无包名的类的字节码和当前类保存在同一目录中即可。

避免类名混淆

1.区分无包名和有包名的类
如果一个源文件使用了一个无名包中的A类,同时又用import语句引入了某个有包名的同名的类,如tom.jiafei中的A类,就可能引起类名的混淆。

2.区分有包名的类
如果一个源文件引入了两个包中同名的类,那么在使用该类时,不允许省略包名

示例:

可以如下建立规范的包名和类,便于管理
这里写图片描述
如何来import这些东西?
直接在eclipse写以上类时,会自动导入相应的包,如图所示
这里写图片描述
如果在不同的目录下,有同一个tom类,在eclipse输入tom时,会给与提示
这里写图片描述
如果在源文件中出现两个tom的区分
这里写图片描述

猜你喜欢

转载自blog.csdn.net/bravery2288/article/details/82256246