静态数据
什么是静态数据
静态数据是指类的所有对象共享的数据,您可以在创建类实例后修改这些数据。使用静态数据可定义类实例使用的计数器,或在类的所有对象之间共享的其他数据。与实例数据不同,静态数据不会因对象而异。MATLAB® 提供了几种定义静态数据的方式来满足您的要求。
静态变量
类可以使用持久变量来存储静态数据。您可以定义一个静态方法或局部函数,以在其中创建持久变量。该方法或函数提供对此变量的访问。当您要存储一个或两个变量时,请使用这种编程方式。
保存定义持久变量的类对象不会保存与该类相关联的静态数据。要将静态数据保存在对象中,或者定义更广泛的数据,请使用静态数据对象编程方式 静态数据对象
实现
StoreData
类定义一个静态方法,该方法声明持久变量 Var
。通过 setgetVar
方法,可以对持久变量中的数据进行 set 和 get 访问。由于 setgetVar
方法具有公共访问权限,因此您可以以全局方式对存储在持久变量中的数据进行 set 和 get 访问。通过设置方法的 Access
特性来控制对方法的访问权限。
classdef StoreData methods (Static) function out = setgetVar(data) persistent Var; if nargin Var = data; end out = Var; end end end
通过带输入参量调用 setgetVar
来设置变量值。该方法将输入值赋给持久变量:
StoreData.setgetVar(10);
通过不带输入参量的方式调用 setgetVar
来获取变量值:
a = StoreData.setgetVar
a =
10
通过对 StoreData
类调用 clear
清除持久变量:
clear StoreData
a = StoreData.setgetVar
a = []
将 setgetVar
等方法添加到您需要静态属性行为的任何类中。
静态数据对象
要存储更广泛的数据,请定义具有公共属性的句柄类。将类的对象赋给使用静态数据的类的常量属性。如果您要进行以下操作,这种编程方式非常有用:
添加更多修改数据的属性或方法。
保存数据类的对象并重新加载静态数据。
实现
SharedData
类是句柄类,它允许您从多个句柄变量引用相同的对象数据:
classdef SharedData < handle properties Data1 Data2 end end
UseData
类是使用存储在 SharedData
类中的数据的类的桩件。UseData
类将 SharedData
对象的句柄存储在常量属性中。
classdef UseData properties (Constant) Data = SharedData end % Class code here end
Data
属性包含 SharedData
对象的句柄。加载 UseData
类时,MATLAB 会构造 SharedData
对象。所有随后创建的 UseData
类实例都引用同一个 SharedData
对象。
要初始化 SharedData
对象属性,请通过引用常量属性加载 UseData
类。
h = UseData.Data
h = SharedData with properties: Data1: [] Data2: []
使用 SharedData
对象的句柄将数据赋给属性值:
h.Data1 = 'MyData1'; h.Data2 = 'MyData2';
UseData
类的每个实例都引用同一个句柄对象:
a1 = UseData; a2 = UseData;
使用对象变量引用数据:
a1.Data.Data1
ans = MyData1
将一个新值赋给 SharedData
对象中的属性:
a1.Data.Data1 = rand(3);
UseData
类的所有新对象和现有对象共享同一个 SharedData
对象。a2
现在包含 rand(3)
数据,这些数据在之前的步骤中赋给了 a1
:
a2.Data.Data1
ans = 0.8147 0.9134 0.2785 0.9058 0.6324 0.5469 0.1270 0.0975 0.9575
要重新初始化常量属性,请清除 UseData
类的所有实例,然后清除该类:
clear a1 a2 clear UseData
常量数据
要存储不变的常量值,请将数据赋给常量属性。类的所有实例共享该属性的相同值。通过设置属性的 Access
特性,控制对常量属性的访问权限。
更改常量属性值的唯一方法是更改类定义。使用常量属性,如 Java® 中的公共最终静态字段。