Static Data
What Is Static Data
Static data refers to data that all objects of the class share and that you can modify after creation. Use static data to define counters used by class instances or other data that is shared among all objects of a class. Unlike instance data, static data does not vary from one object to another. MATLAB® provides several ways to define static data, depending on your requirements.
Static Variable
Classes can use a persistent variable to store static data. Define a static method or local function in which you create a persistent variable. The method or function provides access to this variable. Use this technique when you want to store one or two variables.
Saving an object of the class defining the persistent variable does not save the static data associated with the class. To save your static data in an object, or define more extensive data, use the static data object technique Static Data Object
Implementation
The StoreData class defines a static method
that declares a persistent variable Var. The setgetVar method
provides set and get access to the data in the persistent variable.
Because the setgetVar method has public access,
you can set and get the data stored in the persistent variable globally.
Control the scope of access by setting the method Access attribute.
classdef StoreData methods (Static) function out = setgetVar(data) persistent Var; if nargin Var = data; end out = Var; end end end
Set the value of the variable by calling setgetVar with
an input argument. The method assigns the input value to the persistent
variable:
StoreData.setgetVar(10);
Get the value of the variable by calling setgetVar with
no input argument:
a = StoreData.setgetVar
a =
10Clear the persistent variable by calling clear on
the StoreData class:
clear StoreData
a = StoreData.setgetVara =
[]Add a method like setgetVar to any class
in which you want the behavior of a static property.
Static Data Object
To store more extensive data, define a handle class with public properties. Assign an object of the class to a constant property of the class that uses the static data. This technique is useful when you want to:
Add more properties or methods that modify the data.
Save objects of the data class and reload the static data.
Implementation
The SharedData class is a handle class, which
enables you to reference the same object data from multiple handle
variables:
classdef SharedData < handle properties Data1 Data2 end end
The UseData class is the stub of a class
that uses the data stored in the SharedData class.
The UseData class stores the handle to a SharedData object
in a constant property.
classdef UseData properties (Constant) Data = SharedData end % Class code here end
The Data property contains the handle of
the SharedData object. MATLAB constructs the SharedData object
when loading the UseData class. All subsequently
created instances of the UseData class refer to
the same SharedData object.
To initialize the SharedData object properties, load the
UseData class by referencing the constant property.
h = UseData.Data
h =
SharedData with properties:
Data1: []
Data2: []Use the handle to the SharedData object to
assign data to property values:
h.Data1 = 'MyData1'; h.Data2 = 'MyData2';
Each instance of the UseData class refers
to the same handle object:
a1 = UseData; a2 = UseData;
Reference the data using the object variable:
a1.Data.Data1
ans = MyData1
Assign a new value to the properties in the SharedData object:
a1.Data.Data1 = rand(3);
All new and existing objects of the UseData class
share the same SharedData object. a2 now
has the rand(3) data that was assigned to a1 in
the previous step:
a2.Data.Data1
ans =
0.8147 0.9134 0.2785
0.9058 0.6324 0.5469
0.1270 0.0975 0.9575To reinitialize the constant property, clear all instances of
the UseData class and then clear the class:
clear a1 a2 clear UseData
Constant Data
To store constant values that do not change, assign the data
to a constant property. All instances of the class share the same
value for that property. Control the scope of access to constant properties
by setting the property Access attribute.
The only way to change the value of a constant property is to change the class definition. Use constant properties like public final static fields in Java®.