一、java的static import
允许在代码中直接引用别的类的static变量和方法(在权限许可范围内),是import的延续。
引入static import最主要考虑到两个需要,第一个就是对一些工具性的,常用的静态方法进行直接引用。比如,java.lang.Math里的一大堆数学方法abs,exp等。
第二个就是对常数变量进行直接引用,其中也包扩对enum的直接引用。
static import的限制和import也基本一样,就是不能出现二义性。另外,static import不支持先import类,然后import static 类.*(不加package)的形式。
例:
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 友好提示功能是另说),特别是在一个类中有多个静态导入语句时,若还使用了*(星号)通配符,把一个类的所有静态元素都导入进来了,那简直就是恶梦。
对于静态导入,一定要遵循两个规则:
- 不使用*(星号)通配符,除非是导入静态常量类(只包含常量的类或接口)。
- 方法名是具有明确、清晰表象意义的工具类。
个人认为istatic方法中new的对象就是一个局部变量,不是static类型。