import与package

最近在通过《Algorithms》的第4版来学习算法,这本书用的语言是Java,它的示例代码中的输入输出经过了作者的封装,在stdlib.jar这个jar包中,为了目录结构清楚,我建立了一个目录lib存放stdlib.jar,每章自己敲的代码依次放到ch01、ch02...中。

假设在test目录中有一个test.java,用到了stdlib.jar中的StdOut:

import java.util.Arrays;

public class test {
    public static void main(String[] args)
    {   
        int[] testArr = {4, 2, 3, 1}; 
        Arrays.sort(testArr);
     
        for (int i : testArr) {
            StdOut.print(i + " ");
        }   
        StdOut.print("\n");
    }   
}
在test目录下编译:javac -cp ../lib/stdlib.jar test.java,运行:java -cp .:../lib/stdlib.jar test,输出:1 2 3 4。为什么Arrays要用import导入,而StdOut不需要import?Arrays前的util和java分别代表什么?

我的jdk版本为1.8,安装好后在jdk1.8.0下有一个src.zip的压缩包,这里面有Arrays的源码,解压后可看到目录结构:



在Arrays.java的开头中有:

package java.util;

如果在test.java的开头加一行“package test;”,结果会怎样?编译时找不到StdOut了。

看一下StdOut.java的源码,其开头没用package。package的作用是什么?

oracle文档的解释:

To make types easier to find and use, to avoid naming conflicts, and to control access, programmers bundle groups of related types into packages.

为了使类型易于找到和使用,避免命名冲突和控制访问,将相关的类型归组并放到package中。

Arrays这个类属于java.util这个package,可将java看作util的父package,与父子目录对应。

在不加package语句的情况下,一个类就属于默认package,使用同一package的类时无需import。在StdOut.java和test.java都不加package时,StdOut类和test类同属于默认package,所以StdOut不需import,加了编译时会报错。

当在test.java中加入“package test;”后,test类属于test这个package,与StdOut不属于同一package,所以需要将添加import语句,import的语法如下:

import package.class_name; // package可包含多个层次

在StdOut.java中开头添加:

package stdlib;

在test.java的开头添加:

package test;

import stdlib.StdOut;

重新编译后在test目录的父目录中运行:java -cp .:./lib/stdlib.jar test.test


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值