java 中包和目录是什么关系?


现在其他包中的 HelloWorld.java 可以访问数据类型这个类。
如果我在其他包这个目录中创建一个新的目录,并且把 HelloWorld.java 移动到这个目录内。编辑器会提示需要声明这个包,假如这个新的目录的名称是 h,那么需要增加一条 package h;这个时候数据类型这个类就无法被访问了。

包和目录层级之间是有什么关系?

阅读 1.1k
2 个回答

首先,任何一个java里的类都必须有一个所属的包名,你这里是不是插件原因没有提示报错,你可以试试main程序应该是运行不起来的:
image.png
所以后来编辑器提示要声明这个包是对的,加上声明后你想要访问到数据类型这个类,就要在HelloWorld这个类里使用import显式引入,如果是同一个包下的就不需要:
image.png
当然数据类型这个类也要有包声明:
image.png
总结一下:java里的包类似于其他语言的命名空间,它就是一个目录,你说的(包或者目录)说到底都是一个文件夹而已,只不过包需要在类里显著写出来而已
不同的包下面可以有相同的类,但是相同的包下面不可以有相同的类,java通过这样:
1、避免类名冲突,有相同的类名的时候我们可以通过所属包名来知道它到底是哪一个类
2、实现访问控制:包可以限制类的访问权限
3、模块化管理:包可以将一组相关的类组织在一起,形成一个独立的模块,方便管理和维护

首先,你要明白所谓的包,就是Java中的一个文件目录

你能问这个问题,说明你是初学Java,故此处我主要论述一下 Java为什么要有“包”这个概念?

不知道你目前掌握Java的程度,你应该了解,Java有四大修饰符:public、private、default、protected

image.png

根据上图,其实你应该明白了Java中为什么要有包这个概念了,归根结底,其实是为了方便对代码的权限进行控制、访问

举个栗子,有如下三个类:

package co.b;

import co.pojo1.A;

public class Main {
    
    public static void main(String[] args) {
        A a = new A();

        a.print1();
        a.print2();
    }

}
package co.pojo1;

public class A {

    public void print1(){
        System.out.println("print1");
    }


    private void print2(){
        System.out.println("print2");
    }
}
package co.pojo2;

public class A {

    public void print1(){
        System.out.println("whh");
    }
}

首先因为Java包的缘故,可以通过import co.pojo1.A; 进行精准引入,这样会引入co.pojo1下的A,而不是co.pojo2下的A;
其次,可以与访问控制符相配合,实现访问权限控制

推荐问题
logo
Microsoft
子站问答
访问
宣传栏