REST Assured 系列汇总 之 REST Assured 3 - Static Import In Java
今天我们来了解一下有关Java中Static修饰符,为后期系列打个基础。
静态成员:
当声明一个类的成员用static修饰时,我们称这个变量为该类的静态成员,也叫作类成员。
我们可以用static修饰变量,方法,内部类及代码块。静态成员只跟类相关,跟类实例对象不相关。使用静态成员不用初始化类(创建一个类的实例对象)这是因为所有的静态成员会随着该类加载到内存时一并加载到内存中,而非静态成员是在类实例化对象时才加载到内存。
我们使用类名作为引用访问任意静态成员,也可以使用类实例对象作为引用访问静态成员(不推荐)
一个静态变量是被该类的每一个实例对象一起共享的,当该类的任何一个实例对象改变这个静态变量时,会影响到该类其它实例对象,因为静态变量是一个公享的变量。当然静态成员变量也可以不通过实例对象修改,类名引用即可进行修改。
通过代码来看看静态成员和非静态成员变量访问的区别:
package JavaConcepts;
public class StaticMembers {
// Static variable
public static String name = "Selenium";
// Non static variable
public int version = 3;
// Static method
public static void printName()
{
System.out.println("Name is :"+name);
}
// Non static method
public void printVersion()
{
System.out.println("Version is : "+version);
}
public static void main(String[] args) {
// Can call static members with class name
System.out.println(StaticMembers.name);
StaticMembers.printName();
// Can not call non static members with class name
//System.out.println(StaticMembers.version);
//StaticMembers.printVersion();
// Creating an object of class. We can call members using object name
StaticMembers sm = new StaticMembers();
// Calling static member with object is not recommended
System.out.println(sm.name);
sm.printName();
// Object name should be used to call non static members of class
System.out.println(sm.version);
sm.printVersion();
}
}
结果:
Selenium
Name is :Selenium
Selenium
Name is :Selenium
3
Version is : 3
上面代码中,我们访问静态成员时都使用类名,当我们需要多次调用时,每次我们必须使用类名作为引用,会不会觉得有些冗余,我们可否让代码变得更加简洁,更加可读呢?Java中的静态导入可以解决这个问题。
Static Import:
Java 1.5 引入静态导入概念,静态导入允许访问类的public 静态成员(fields && methods)不用特别指定类名。
语法:
当我们要import一个类的所有public的静态成员时:
import static pkg1.classname.*;
例如:
当import一个特定的成员时:
import static pkg1.classname.someMethod;
例如:
前面的代码例子使用import static后
package JavaConcepts;
import static JavaConcepts.StaticMembers.*;
public class WithStaticImport {
public static void main(String[] args) {
// No need to Use class name to call static members
System.out.println(name);
printName();
}
}
什么时候用Import static?
推荐尽量避免。当需要从1-2个类中调用静态成员时,static import是一个比较好的选择。当需要从多个类中调用成员时,为了增加可读性,减少困惑,最好不要用static import。
根据Oracle doc,我们要非常节制地(Very sparingly)使用static import
也就是说,当你需要从一个或则两个类中频繁访问静态成员时,可以使用static import。如果过度使用,会导致程序不可读和难维护。
阅读代码时(包括你自己的代码,几个月时间后),很困惑这些静态成员来自哪些类。导入一个类的所有静态成员是特别不利于可读的。如果你只需一到两个成员,可以分别import。适当地使用static import可以使得你的程序更加可读和简洁,移除重复的类名。