`

Java静态导入(import static)需谨慎

 
阅读更多


从Java 5 开始引入了静态导入语法(import static),其目是为了减少字符输入量,提高代码的可阅读性,以便更好地理解程序。


我们先来看一个不使用静态导入的例子,也就是一般导入:

public class MathUtils{

    // 计算圆面积

    public static double calCircleArea(double r){

        return Math.PI * r * r;

    }

    // 计算球面积

    public static double calBallArea(double r){

        return 4* Math.PI * r * r;

    }

}

这是很简单的数学工具类,我们在这两个计算面积的方法中都引入了java.lang.Math 类(该类是默认导入的)中的PI(圆周率)常量,而Math 这个类写在这里有点多余,特别是如果MathUtils 中的方法比较多时,如果每次都要敲入Math 这个类,繁琐且多余,静态导入可解决此类问题,使用静态导入后的程序如下:

import static java.lang.Math.PI;

public class MathUtils{

    // 计算圆面积

    public static double calCircleArea(double r){

        return PI * r * r;

    }

    // 计算球面积

    public static double calBallArea(double r){

        return 4 * PI * r * r;

    }

}


静态导入的作用是把Math 类中的PI 常量引入到本类中,这会使程序更简单,更容易阅读,只要看到PI 就知道这是圆周率,不用每次都要把类名写全了。

但是,滥用静态导入会使程序更难阅读,更难维护。静态导入后,代码中就不用再写类名了,但是我们知道类是“一类事物的描述”,缺少了类名的修饰,静态属性和静态方法的表象意义可以被无限放大,这会让阅读者很难弄清楚其属性或方法代表何意,甚至是哪一个类的属性(方法)都要思考一番(当然,IDE 友好提示功能是另说),特别是在一个类中有多个静态导入语句时,若还使用了*(星号)通配符,把一个类的所有静态元素都导入进来了,那简直就是恶梦。我们来看一段例子:

import static java.lang.Double.*;

import static java.lang.Math.*;

import static java.lang.Integer.*;

import static java.text.NumberFormat.*;

public class Client {

    // 输入半径和精度要求,计算面积

    public static void main(String[] args) {

        double s = PI * parseDouble(args[0]);

        NumberFormat nf = getInstance();

        nf.setMaximumFractionDigits(parseInt(args[1]));

        formatMessage(nf.format(s));

    }

    // 格式化消息输出

    public static void formatMessage(String s){

        System.out.println(" 圆面积是:"+s);

    }

}


就这么一段程序,看着就让人火大:常量PI,这知道,是圆周率;parseDouble 方法可能是Double 类的一个转换方法,这看名称也能猜测到。那紧接着的getInstance 方法是哪个类的?是Client 本地类?不对呀,没有这个方法,哦,原来是NumberFormate 类的方法,这和formateMessage 本地方法没有任何区别了—这代码也太难阅读了,非机器不可阅读。

所以,对于静态导入,一定要遵循两个规则:

1) 不使用*(星号)通配符,除非是导入静态常量类(只包含常量的类或接口)。

2) 方法名是具有明确、清晰表象意义的工具类。


何为具有明确、清晰表象意义的工具类?我们来看看JUnit 4 中使用的静态导入的例子,代码如下:

import static org.junit.Assert.*;

public class DaoTest {

    @Test

    public void testInsert(){

        // 断言

        assertEquals("foo", "foo");

        assertFalse(Boolean.FALSE);

    }

}


我们从程序中很容易判断出assertEquals 方法是用来断言两个值是否相等的,assertFalse方法则是断言表达式为假,如此确实减少了代码量,而且代码的可读性也提高了,这也是静态导入用到正确地方所带来的好处。

 http://www.weixueyuan.net/view/6101.html

分享到:
评论

相关推荐

    欧柏泰克:Java包的静态导入import static和import的区别

    欧柏泰克:Java包的静态导入import static和import的区别 Java中的静态导入是Java 5中引入的一项新特性,允许开发者在编写代码时更方便地使用静态方法和成员变量。下面我们来详细地了解Java中的静态导入和普通导入...

    Java的静态导入源代码

    在Java编程语言中,静态导入(static import)是一种特殊的导入方式,它允许程序员直接使用类中的静态成员,而无需每次都指定类名。这种特性在2004年发布的Java 5.0版本中引入,目的是为了提高代码的可读性和简洁性...

    Java 静态导入与编译器语法设置(eclipse)

    总结来说,Java的静态导入是一个实用的特性,但需谨慎使用。同时,理解并掌握Eclipse的编译器设置可以帮助你优化开发环境,提高代码质量和开发效率。通过持续学习和实践,你可以成为一名更出色的Java开发者。

    在Eclipse中导入static元素Java开发Java

    其中,导入static元素是Java编程中一个重要的操作,它允许我们直接引用类中的静态成员,无需创建类实例。本篇文章将深入探讨如何在Eclipse中有效地导入static元素,并分享一些实用的开发技巧。 首先,我们需要理解...

    文件文件文件文件文件

    1. **静态导入(Static Import)**:在Java 5中引入的静态导入允许开发者直接引用类的静态成员,而无需指定类名。以前,我们需要写`Math.random()`,现在可以通过`import static java.lang.Math.random;`,然后直接...

    4static封装类.rar在类的声明里查看有无静态元素(static

    4. 静态导入(Static Import): 在某些语言中,如Java,可以使用静态导入来避免在代码中频繁地写类名。这使得可以直接使用静态方法或变量,而不需要指定类名。例如: ```java import static java.lang.Math.*; ...

    java视频 static关键字

    4. **静态导入(Static Import)**: Java允许静态导入,这意味着你可以直接引用类的`static`成员,而不需要指定类名。例如: ```java import static java.lang.Math.PI; ... double area = PI * radius * ...

    static 的使用场合

    5. **静态导入(Static Import)** - Java 5引入了静态导入功能,允许开发者直接引用类的静态成员,而不需要指定类名。 ```java import static java.lang.Math.*; double result = sqrt(16); // 直接使用Math类...

    JDK新特性之静态导入

    从JDK5.0之后,import语句不仅可以导入类,还增加了导入静态方法和静态域的功能。例如,如果在源文件的顶部,添加一条指令:  Java代码  import java.lang.System.*;  那么就可以使用System类的静态方法和...

    java中final和static的总结

    4. **静态导入**:可以使用`import static`导入类的静态成员,避免每次使用时都需要带上类名。 结合`final`和`static`,我们可以创建常量字段,这些字段在编译时就被确定且不可更改,适用于定义程序中的全局常量,...

    静态变量的导入以及集合的运用

    在Java中,可以通过`import static`语句来直接导入一个类中的静态成员(包括静态变量和静态方法)。这种方式可以避免重复输入类名,使得代码更加简洁易读。例如,在给定的代码片段中: ```java import static java....

    java中带static关键字的程序内存分析

    6. **静态导入(Static Import)**: - Java允许使用`import static`语句,可以直接引用类的静态成员,提高代码可读性。 总的来说,`static`关键字在Java中有着广泛的应用,理解它的内存行为对于编写高效、无内存...

    java-package与import机制

    - **静态导入:** ```java import static com.example.myapp.MyClass.myMethod; ``` 这允许直接调用`myMethod`,无需通过类名前缀。 **3. Classpath的作用** 在编译和运行Java程序时,系统需要知道去哪里寻找所需...

    java static学习

    Java 中的静态导入包是指使用 static 关键字修饰的导入包,这种导入包可以直接访问静态成员。静态导入包的特点是: * 可以直接访问静态成员 * 无需使用类名访问 例如: ```java import static java.lang.Math.PI; ...

    Java认证:Java中import使用.doc

    3. **静态导入:** - `import static`可以用于导入类中的静态成员(方法或字段),使得在使用这些静态成员时不需要类名前缀。 - 示例: ```java import static java.lang.System.out; public class Test { ...

    java中静态导入机制用法实例详解

    总之,Java中的静态导入机制是一种方便的语法糖,它减少了代码中的类名重复,提高了代码的可读性,但过度使用应谨慎,以免影响代码的清晰度和维护性。在实际开发中,合理地运用静态导入可以提高编码效率,但也需要...

    Java使用static

    四、静态导入(Static Import) 1. **便捷性**:通过`import static`可以将类的静态成员直接引入到当前作用域,减少代码中的类名引用。 ```java import static java.lang.Math.PI; double area = PI * radius * ...

    大数据必学Java基础(三十八):包和import讲解

    - 静态导入允许一次性导入类中的所有静态成员,例如`import static java.lang.Math.*;`导入了Math类的所有静态方法和常量。 五、静态导入 静态导入(`import static`)用于引入类的静态成员,使得可以直接调用这些...

    Java中import语句的测试代码清单.pdf

    在Java编程语言中,`import`语句是一个至关重要的部分,它允许我们引用其他类、接口或包,以便在我们的程序中使用它们。这个过程被称为“导入”或“导包”,使得代码更加简洁且易于管理。以下是关于Java `import`...

    Java中import语句.pdf

    - **使用`import static`**:对于静态成员,可以使用`import static`引入,这有助于避免命名冲突,因为静态导入的成员是直接在当前作用域中可用的。 总之,`import`语句是Java编程中不可或缺的一部分,它帮助我们更...

Global site tag (gtag.js) - Google Analytics