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会导致模棱两可,因为这两个类中都存在这些成员。