面向对象集|每日一题:Java的静态导入 import static 和常规导入 import 有什么区别?

参考回答: 在 Java 中,如果要在一个类中使用另外一个包中的某个类,大多数情况下就要涉及到导包的使用了。

JDK 1.5 之前只能使用 import 来导入不同包的类,语法是:

// 导入指定包的指定类
import 包名.类名;
// 导入指定包的所有类
import 包名.*;
复制代码

导入完之后就可以正常使用该类的 API 了。

package demo1;

// 导入Arrays类
import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[] arr = { 5, 3, 4, 7, 6, 2, 1 };
        // 使用Arrays类的静态方法
        Arrays.sort(arr);
        System.out.println("数组最大值为:" + arr[arr.length - 1]);
    }
}
复制代码

而在 JDK 1.5 开始,Java 新增了一个静态导入的特性,语法是:

// 导入指定类的指定静态信息(静态变量、静态常量、静态方法)
import static 包名.类名.静态信息;
// 导入指定类的所有静态信息
import static 包名.类名.*;
复制代码

顾名思义,静态导入只能导入某个类中的静态信息,包括静态变量、静态常量、静态方法。 这样导入完之后就可以直接使用这个类的静态信息了,而不用再通过 类名.静态信息 的方式来使用了。

package demo2;

// 导入Arrays类的所有静态信息
import static java.util.Arrays.*;

public class Test {
    public static void main(String[] args) {
        int[] arr = { 5, 3, 4, 7, 6, 2, 1 };
        // 使用Arrays类的静态方法
        sort(arr);
        System.out.println("数组最大值为:" + arr[arr.length - 1]);
    }
}
复制代码

但是使用静态导入的时候也有一些注意事项:

1.使用静态导入,会牺牲程序的阅读性,不容易区分某个信息是属于当前类的还是属于静态导入的。

2.使用静态导入的时候,如果引入了和当前类的信息冲突的内容,或者静态导入了多个类有相同的静态信息。总之,是会导致编译器模糊不清的情况 ,这时候就还是需要用 类名.静态信息 的方式来加以区分。

package demo3;

import static java.util.Arrays.*;
import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        int[] arr = { 5, 3, 4, 7, 6, 2, 1 };
        // 不能使用静态导入的toString,因为与当前类从Object类继承的toString冲突
        // String arrStr = toString(arr);
        String arrStr = Arrays.toString(arr);
        System.out.println(arrStr);
    }
}
复制代码
package demo4;

import static java.lang.Integer.MAX_VALUE;
import static java.lang.Long.MAX_VALUE;

public class Test {
    public static void main(String[] args) {
        // 不能直接使用MAX_VALUE,因为Long和Integer类都有该静态常量
        // System.out.println(MAX_VALUE);
        System.out.println(Integer.MAX_VALUE);
    }
}
复制代码

当然了,如果要大量使用某个类的静态信息,使用静态导入不失为一种更简洁的方式。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享