没有显式导入的类之间的依赖关系

Wic*_*koo 2 java import dependencies

让我们在Java中考虑这个简单的类层次结构:

A类:

package a;

import b.B;

public class A {
    public B a() {
        return new B();
    }
}
Run Code Online (Sandbox Code Playgroud)

B级:

package b;

public class B {
    public void b() {
        System.out.println("B!");
    }
}
Run Code Online (Sandbox Code Playgroud)

主要:

import a.A;

public class Main {
    public static void main(String[] args) {
        A a = new A();
        a.a().b();
    }
}
Run Code Online (Sandbox Code Playgroud)

可以看出,只有A从课堂直接导入Main.但是,我们正在调用b返回的方法A.a().我的问题是,虽然我们没有之间的直接进口依存度不MainB,被他们仍然被认为是直接依赖?例如,当我分析类之间的依赖关系时?

Thi*_*ilo 5

是的,这是一种直接依赖.您只需将其声明给编译器,因为它可以查看它返回的方法签名B并为您解析该类.

如果编译器找不到B(或者您要在其上调用的方法),则会收到有关缺少类的编译时错误.

在运行时,当您加载类时,它还会加载方法签名中引用的所有类(如果找不到这些类,则会失败).

另请注意,import语句本身仅适用于编译器.它们对生成的类文件没有影响.这意味着如果您导入了10个未使用的类,那么这些类将不会成为依赖项(编译器仍然会在导入部分中抱怨它们丢失,但它们不会在运行时加载).