Java静态导入示例

时间:2020-01-09 10:35:18  来源:igfitidea点击:

使用Java 5中添加的Java静态导入功能,我们可以访问类的静态成员(定义为public static的字段和方法)而无需使用类名对其进行限定。

如何在Java中使用静态导入

通常,如果我们需要访问类的任何静态成员(静态字段或者方法),则需要使用类名称对其进行限定。

例如,用于访问静态方法的语法

ClassName.static_method()

静态导入有助于缩短使用静态成员所需的语法。使用静态导入,我们可以导入类中所需的静态成员。

静态导入静态字段的语法

import static package_name.className.static_field;

静态导入静态方法的语法

import static package_name.className.static_method;

我们还可以使用以下语法导入类的所有静态成员:

import static package_name.className.*;

Java静态导入示例

Java中的Math类具有许多静态方法,首先让我们看看如果不使用静态导入,如何使用这些静态方法。

public class MathDemo {
  public static void main(String[] args) {
    double value = Math.pow(3, 2);
    System.out.println("Square of 3 is- " + value);
    double sqrt = Math.sqrt(3);
    System.out.println("Square root of 3 is- " + sqrt);
  }
}

输出:

Square of 3 is- 9.0
Square root of 3 is- 1.7320508075688772

使用静态导入的示例

通过使用静态导入,我们无需使用类名来限定方法。

import static java.lang.Math.*;
public class MathDemo {
  public static void main(String[] args) {
    // Qualifying static method is not required
    double value = pow(3, 2);
    System.out.println("Square of 3 is- " + value);
    double sqrt = sqrt(3);
    System.out.println("Square root of 3 is- " + sqrt);
  }
}

正如我们在代码中看到的那样,对Math类的所有静态成员都进行了静态导入,因此无需限定Math类的方法。

我们也可以只导入所需的方法。

import static java.lang.Math.pow;
import static java.lang.Math.sqrt;

使用静态导入的优点

  • 如果我们在代码中使用一个或者两个类中的静态成员,则静态导入有助于使代码简洁。

  • 静态导入还可以避免创建仅包含常量的接口,然后实施被认为是常量接口反模式的接口。我们也可以在一个类中定义静态字段,然后对该类的静态成员进行静态导入。

使用静态导入的缺点

  • 如果要从许多类中进行静态导入,则会造成混乱,因为很难知道任何特定的静态成员属于哪个类。

  • 如果从不同的类中导入两个同名的静态成员,则静态导入也可能导致歧义。

静态导入歧义

如果从不同的类中导入了两个同名的静态成员,则编译器将无法决定使用哪个成员并引发错误。

例如,考虑以下代码,其中使用静态导入来导入Integer和Long的静态成员。现在,使用静态方法valueOf(String)和静态字段MAX_VALUE会导致模棱两可,因为这两个类中都存在这些成员。