SpringMvc问题记录-Controller对于静态变量的访问分析
问题描述
在于朋友的讨论中分析到⼀种场景,即:Controller对于⼀个类中的静态变量进⾏访问时,如果第⼀个接⼝修改该静态变量的数据,另外⼀个接⼝获取该静态变量的数据,那么返回的结果是什么?
操作步骤是,先进⾏修改接⼝的访问,然后再进⾏获取接⼝的访问。
实际验证
创建⼀个SpringBoot项⽬,项⽬结构如下:
创建Controller接⼝
package ller;
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 ="修改之后的数据";
return"已修改";
}
/**
static修饰的变量* @return
*/
@PostMapping("/get")
public String get(){
//获取操作
return Constants.HELLO_WORLD;
}
}
创建静态变量类
package com.taowd.util;
/**
* @author Taoweidong
*/
public class Constants {
/**
* 静态常量.
*/
public static String HELLO_WORLD ="Hello World";
}
测试过程
测试使⽤postman⼯具进⾏接⼝测试
第⼀次访问get接⼝查看原数据
第⼆次访问set接⼝重新设置静态变量值
第三次访问get接⼝查看静态变量的值
结果分析
static变量
static变量也称作静态变量,静态变量和⾮静态变量的区别是:静态变量被所有的对象所共享,在内存中只有⼀个副本,它当且仅当在类初次加载时会被初始化。⽽⾮静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进⾏初始化。
在Constants类中的HELLO_WORLD变量即被static修饰符修饰,属于静态变量,在内存中只有⼀个副本,当类初次加载时被初始化,后⾯系统的使⽤,都是修改查询这⼀个副本,因此修改接⼝被触发后HELLO_WORLD变量就被修改,然后调⽤get查询接⼝查询时,获取的就是修改后的数据。
參考
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论