欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

22、包的定义与使用

程序员文章站 2022-04-01 11:24:17
...

包的定义

1、包指的是程序的目录。早期开发一个程序是将所有类写在一个java文件中,编译后程序将直接保存在根目录下。利用包可以实现程序拆分,将不同的类根据要求保存在不同目录中。
包的定义通过关键字package完成。
范例:定义包

package com.java.demo;

public class Demo {
    public static void main(String[] args) {
    }
}

2、定义包时用.表示子目录。如果类中有包的定义,就必须使其保存在对应的目录下,而这些目录不需要手动创建,可以使用命令自动生成:
(1)打包编译:java -d . Demo.java
|- -d: 根据package定义生成目录;
|-.:设置保存路径。.表示在当前路径下生成。
(2)解释程序时不要进入包中解释程序,而是在包外输入类的完整名称包.类
|- java com.java.demo.Demo

包的导入

1、使用包可以将一个完整的程序拆分为不同文件,从而分别保存。这存在问题:不同包间可能要进行互相访问,就需要进行导包操作,使用import语句完成。
范例:定义com.java.util.Message

package com.java.util;

class Message{
    public static void print(){
        System.out.println("Hello World !");
    }
}

定义com.java.test.TestMessage

package com.java.test;

import com.java..util.Message;

public class TestMessage {
    public static void print() {
        Message msg = new Message();
        msg.print();
    }
}

编译时,应先编译Message,再编译TestMessage:
|- javac -d . Message.java
|- javac -d . TestMessage.java
此时报错:Message在com.java.util中不是公共的; 无法从外部程序包中对其进行访问
出现上述问题是因为public class定义的类可以被不同的包访问;而class定义的类只能被本包所访问。因此我们要修改Message.java:

package com.java.util;

public class Message{
    public static void print(){
        System.out.println("Hello World !");
    }
}

Java编译器考虑到大型程序开发,因此可以使用通配符*java -d . *.java编译当前目录下所有java文件。
2、当要导入一个包中多个类时,可以使用import 包.*

package com.java.test;

import com.java..util.*;

public class TestMessage {
    public static void print() {
        Message msg = new Message();
        msg.print();
    }
}

import 包.*并不是导入包中所有的类,而是只导入程序所需的类,因此不用担心性能问题。
3、一个Java文件可能导入多个包,而不同包中可能存在同名的类。现假设:
·com.java.util.Message;
·com.java.demo.Message.

package com.java.demo;

public class Message {
    public static void print() {
        System.out.println("世界你好!");
    }
}

由于需要,要同时导入上述两个类:

package com.java.test;

import com.java.demo.Message;
import com.java.util.Message;

public class TestMessage {
    public static void main(String[] args) {
        Message msg = new Message();
        msg.print();
    }
}

系统报错:Error:(4, 1) java: com.java.demo.Message的 single-type-import 已定义具有相同简名的类型。为了避免该错误,在使用类时,应加上包名:

package com.java.test;

import com.java.demo.Message;
import com.java.util.Message;

public class TestMessage {
    public static void main(String[] args) {
        com.java.demo.Message msg = new com.java.demo.Message();
        Message.print();
    }
}

系统常用包

Java提供了许多程序开发包,此外还有许多第三方包。Java自带的常见系统包如下:

(1)java.lang:包含了String、Object、Integer等类,此包系统自动导入;
(2)java.lang.reflect:反射开发包;
(3)java.util:Java的工具包,提供了大量的工具类,像链表;
(4)java.util.regex:正则工具包;
(5)java.text:国际化处理程序包;
(6)java.io:进行输入、输出处理以及文件操作;
(7)java.net:网络编程开发包;
(8)java.sql:数据库程序开发包;
(9)java.applet:Applet程序开发包(已经不用了);
|-Applet指的是在网页上嵌套的程序,可以使用Applet做一些动态效果,是采用绘图的方式完成的显示。随着时间的发展,Applet程序已经不再使用了(如果要再实现同样的功能,都是用Canvas绘图)。
(10)java.awt、javax.swing:图形界面的开发包,主要功能是开发单机程序界面。
|-JDK1.0时推出了awt开发包,但是这个开发包使用了大量的windows图形函数,使Java丧失了可移植性;
|-JDK1.2时推出了javax.swing开发包,是一个轻量级(Java自己开发的,不再使用windows),所以Java更名为Java2;

jar命令

使用jar命令压缩class文件,压缩的单位为包。
22、包的定义与使用
范例:定义Message.java文件

package com.java.util;

class Message{
    public static void print(){
        System.out.println("Hello World !");
    }
}

编译后会生成class文件,此时要交付给用户使用,将改包的代码压缩:jar -cvf my.jar com。生成的jar文件不能直接使用,必须配置CLASSPATH才能使用:SET CLASSPATH = .;jar包所在路径。开发中需要使用大量的第三方jar文件,都需要配置CLASSPATH,最简单的配置就是在环境变量中配置。

相关标签: # Java基础