java中static的使用
在学习Junit的时候,偶然发现了这个一个语句
import static org.junit.Assert.*;
第一次看见这样子的static方法。让我赶快地翻了下书,也没怎么发现有类似的使用方法。之后找了些资料,顺便回顾下static的使用方法。
1. static变量
static修饰的变量估计大家都很熟悉了,就是静态变量(也叫类变量)。它是储存在公共的内存地址。在定义的时候就要进行初始化。如果某一动作对该变量进行了修改,那么在整一个类里面,这个值也会被修改。
2. static方法
static修饰的方法我们称为静态方法。比如我们最常见的静态方法就是main方法。
- 静态方法不依赖于任何对象,因此就不能使用this和super了。
- 静态方法只能调用静态方法和访问静态数据域,而不能直接调用实例方法和和访问实 例数据域。但是实例方法是可以调用静态方法的。当然如果要使用某个实例方法,可以通过创建对象来间接调用。
3. static代码块
static代码块也叫静态代码块,是随着类的加载一起执行的。位置可以位于该类的任何地方。static代码块最大的作用就是优化程序性能。因为它只会在类加载的时候执行一次。
这里顺便说下java父子类的代码块执行顺序
父类的静态代码块—>子类的静态代码块—>执行程序的main方法—>父类的非静态代码块—>父类的无参构造函数—>子类的非静态代码块—>子类的构造函数—>子类成员函数
很容易发现static代码块是最开始就执行的。
4.static导入
回到最开始的问题,import static org.junit.Assert.*的什么意思呢?
它就是所谓的静态导入。
静态导入提供了一种简洁的访问静态变量和静态方法。可以简化使用类的静态成员。可以在使用导入类的静态成员不用加类的前缀。
比如,在我们使用Math中静态变量PI的时候,我们通常都是如下使用的
double area = Math.PI * r * r;
但是当我们静态导入了Math包
那么我们就可以这么使用
double area = PI * r * r;
导入语句就是: import static +包名
这种静态导入的方法,可以简化代码。但是不恰当的使用可能会降低代码的可读性和维护性。