天天看點

REST Assured 3 - Static Import In Java

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可以使得你的程式更加可讀和簡潔,移除重複的類名。

繼續閱讀