第八章《Java高级语法》第9节:静态导入技术

时间:2022-12-31 11:56:31

​Java语言中调用静态方法时要在方法的前面加上类的名称,如下所示。

Math.abs(-10);
Math.abs(2.5);

这段代码中,两次调用了Math类求绝对值的静态方法abs(),如果在程序中多次使用Math类的abs()方法,就必须在程序中反复的写上Math类的名称,这样就造成了大量重复性工作。为了解决这个问题,Java语言引入了一种静态导入技术。传统的导入是导入某个包下的一个类或所有类,而静态导入技术则可以导入一个类的静态属性或方法。静态导入仍然要用import关键字来完成,但为了区别于对普通类和接口的导入,还需在import关键字的后面再加上一个static关键字。下面的【例08_24】展示了如何实现对静态方法的导入。​

【例08_24 导入静态方法】

Exam08_24.java​

import static java.lang.Math.abs;//导入Math类的abs()方法
public class Exam08_24 {

public static void main(String[] args) {
int a = abs(-10);//①
double b = abs(2.5);//②
System.out.println("-10的绝对值是:"+a);
System.out.println("2.5的绝对值是:"+b);
}
}

在【例08_24】中,使用静态导入技术导入了Math类的静态方法,这样在调用它的abs()静态方法时就不需要写上类的名称。各位读者请注意:语句①和语句②分别调用了参数为int和参数为double两个版本的abs()方法,但在进行静态导入时只指定了静态方法的名称,并没有指定具体导入哪一个版本,但程序仍然能够正确运行,这说明只要静态导入时只要指定了方法的名称,这个方法所有的版本都可以在程序中直接使用。​

与普通导入一样,静态导入也可以使用*这个符号来代表导入某个类的所有静态方法和静态属性,下面的【例08_25】展示了使用*号导入一个类的所有静态属性和静态方法。​

【例08_25 导入静态方法和静态属性】

Exam08_25.java​

import static java.lang.Math.*;
import static java.lang.System.*;
public class Exam08_25 {
public static void main(String[] args) {
int a = abs(-10);
double b = abs(2.5);
out.println("-10的绝对值是:"+a);
out.println("2.5的绝对值是:"+b);
out.println("圆周率PI的值是:"+PI);
}
}

【例08_25】中导入了Math类和System类的所有静态方法和静态属性。因此在程序中能够直接调用Math类的abs()方法以及静态属性PI。此外,out对象其实也是System类的一个静态属性,对out属性进行了静态导入使得在控制台上输出信息的语句也更加简化了。​

静态导入这个知识点非常简单,但各位读者在进行静态导入时需要注意:不能出现导入冲突的情况。例如:假设某个A类也有一个静态的abs()方法,如果同时把Math类的abs()方法和A类的abs()方法都导入到程序中,那么在程序中不加类名直接调用abs()方法时,编译器就无法区分到底调用的是哪一个方法,这种情况下仍然要在方法前面加上类的名称以示区别。

除此文字版教程外还有更详细的视频讲解,小伙伴们可以点击这里观看。