問題描述
在于朋友的討論中分析到一種場景,即:Controller對于一個類中的靜態(tài)變量進(jìn)行訪問時,如果第一個接口修改該靜態(tài)變量的數(shù)據(jù),另外一個接口獲取該靜態(tài)變量的數(shù)據(jù)销部,那么返回的結(jié)果是什么?
操作步驟是制跟,先進(jìn)行修改接口的訪問舅桩,然后再進(jìn)行獲取接口的訪問。
實(shí)際驗(yàn)證
創(chuàng)建一個SpringBoot項(xiàng)目雨膨,項(xiàng)目結(jié)構(gòu)如下:
## 創(chuàng)建Controller接口
package com.taowd.controller;
import com.taowd.util.Constants;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Taoweidong
*/
@RestController
@RequestMapping("/")
public class HelloWorld {
/**
* @return
*/
@PostMapping("/set")
public String set() {
//修改操作
Constants.HELLO_WORLD = "修改之后的數(shù)據(jù)";
return "已修改";
}
/**
* @return
*/
@PostMapping("/get")
public String get() {
//獲取操作
return Constants.HELLO_WORLD;
}
}
創(chuàng)建靜態(tài)變量類
package com.taowd.util;
/**
* @author Taoweidong
*/
public class Constants {
/**
* 靜態(tài)常量.
*/
public static String HELLO_WORLD = "Hello World";
}
測試過程
測試使用postman工具進(jìn)行接口測試
第一次訪問get接口查看原數(shù)據(jù)
第二次訪問set接口重新設(shè)置靜態(tài)變量值
第三次訪問get接口查看靜態(tài)變量的值
結(jié)果分析
static變量
參考:https://www.cnblogs.com/dolphin0520/p/3799052.html
static變量也稱作靜態(tài)變量擂涛,靜態(tài)變量和非靜態(tài)變量的區(qū)別是:靜態(tài)變量被所有的對象所共享,在內(nèi)存中只有一個副本聊记,它當(dāng)且僅當(dāng)在類初次加載時會被初始化撒妈。而非靜態(tài)變量是對象所擁有的,在創(chuàng)建對象的時候被初始化排监,存在多個副本狰右,各個對象擁有的副本互不影響。
static成員變量的初始化順序按照定義的順序進(jìn)行初始化舆床。
在Constants類中的HELLO_WORLD變量即被static修飾符修飾棋蚌,屬于靜態(tài)變量嫁佳,在內(nèi)存中只有一個副本,當(dāng)類初次加載時被初始化谷暮,后面系統(tǒng)的使用蒿往,都是修改查詢這一個副本,因此修改接口被觸發(fā)后HELLO_WORLD變量就被修改湿弦,然后調(diào)用get查詢接口查詢時瓤漏,獲取的就是修改后的數(shù)據(jù)。
參考
https://www.cnblogs.com/dolphin0520/p/3799052.html
https://www.cnblogs.com/zxf330301/articles/6105127.html
https://www.cnblogs.com/wenhuang/p/9784419.html
歡迎訪問個人博客: http://www.taoweidong.com/