gpt4 book ai didi

默认情况下未导入 java.lang.Math.abs?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:10:59 24 4
gpt4 key购买 nike

我正在通过 Oracle 为初学者 Java 考试学习。

其中一个问题说:

int absoluteValue = abs(-21)

什么 import 语句将编译所有代码?

给出的正确答案为:

import static java.lang.Math.abs;

但我的问题是,如果 java.lang.* 是默认导入的,那么为什么没有导入 Math 类和 abs() 方法不可用?

最佳答案

But my question is if java.lang.* is imported by default then why is the Math class not imported and the abs method not available?

因为它不是。

因为这就是 Java 的工作方式。包中类的隐式(或显式)通配符导入 导入类。它也不对类成员进行静态导入。

如果你想引用一个类的所有静态成员而不限定它们,你应该使用通配符静态导入;例如

import static java.lang.Math.*;

或者,您可以静态导入单个成员;例如

import static java.lang.Math.abs;

他们为什么这样定义 Java?

嗯,最有可能的理由是隐式导入使代码更难阅读。如果像 abs 这样的方法是默认导入的,那么您需要知道它们都是什么……以及它们是从哪里导入的……才能理解代码的真正含义。

值得一提的是,静态导入仅在 Java 5 中添加。在此之前,如果没有 Math 资格,则无法引用 Math.abs


If you just import the class not its static members then what are you getting when you import it?

你只是得到类名。例如:

import java.util.HashMap;

允许我编写 new HashMap() 而不是 new java.util.HashMap() 等等。这很重要。 (想象一下,如果您总是必须通过类的全名来引用类......)

关于默认情况下未导入 java.lang.Math.abs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28454988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com