Classes and Objects Part 2 Static Class Members

Classes and Objects Part 2 Static Class Members and Arrays of Objects Corresponds with Chapter 7

Class (static) Member Variables n n Recall that with instance variables, there is one variable for each instance (object) of the class that is created. With class variables, there is only a single variable for the entire class, not one for each instance. Class variables are declared using the static modifier. Class variables can be accessed through an instance, or just through the class: n n n instance. Name. member. Name class. Name. member. Name OR (this is preferable) Class member variables are useful if you want to share the same data across all instances of a class.

Making Constants n n n Using the static and final modifiers, you can create a constant When using the final modifier, you must initialize the member variable upon declaration. After initializing a final member, you can never assign another value to it.

Static Methods n n n Static (class) methods operate on the entire class These methods have no this pointer…thus they cannot access instance members without respect to a particular instance. They can only access other static members. For example, the main method is a static method. It is not called with respect to a particular instance.

Circle. With. Static. Variable. And. Method class (similar to Listing 7. 5 p 242) Creating a static variable A static method

UML Diagram Static members are underlined in UML

Application using the Circle. With. Static. Variable. And. Method class Using instance. member syntax for accessing static member Using classname. member syntax for accessing static member

At start of application, when Circle. With. Static. Variable. And. Method class is first loaded, its static member variable is created and initialized…this is prior to and independent of any creation of instances Circle. With. Static. Variable. And. Method class (not instance) with static data num. Of. Objects 0 args main’s frame circle 1 circle 2 Frame Stack Heap

Object is instantiated Circle. With. Static. Variable class (not instance) with static data num. Of. Objects 0 Circle. With. Static. Variables object args main’s frame radius circle 1 circle 2 Frame Stack Heap

Default constructor starts to execute Circle. With. Static. Variable class (not instance) with static data num. Of. Objects 0 constructor frame this args main’s frame Circle. With. Static. Variables object radius circle 1 circle 2 Frame Stack Heap

Instance variable is set Circle. With. Static. Variable class (not instance) with static data num. Of. Objects 0 constructor frame this args main’s frame Circle. With. Static. Variables object radius 1. 0 circle 1 circle 2 Frame Stack Heap

Static variable is set Circle. With. Static. Variable class (not instance) with static data num. Of. Objects Circle constructor frame this 1 Circle. With. Static. Variables object radius 1. 0 args main’s frame circle 1 circle 2 Frame Stack Heap

Constructor terminates and address is assigned into reference Circle. With. Static. Variable class (not instance) with static data num. Of. Objects 1 Circle. With. Static. Variables object args main’s frame radius 1. 0 circle 1 circle 2 Frame Stack Heap

2 nd object is instantiated Circle. With. Static. Variable class (not instance) with static data num. Of. Objects 1 Circle. With. Static. Variables object args main’s frame circle 1 circle 2 radius 1. 0 Circle. With. Static. Variables object radius Frame Stack Heap

The other constructor starts to execute Circle. With. Static. Variable class (not instance) with static data num. Of. Objects new. Radius constructor frame this 1 5. 0 Circle. With. Static. Variables object args main’s frame circle 1 circle 2 radius 1. 0 Circle. With. Static. Variables object radius Frame Stack Heap

Instance variable is set Circle. With. Static. Variable class (not instance) with static data num. Of. Objects new. Radius constructor frame this 1 5. 0 Circle. With. Static. Variables object args main’s frame circle 1 circle 2 radius Circle. With. Static. Variables object radius Frame Stack 1. 0 5. 0 Heap

Static variable is set Circle. With. Static. Variable class (not instance) with static data num. Of. Objects new. Radius constructor frame this 2 5. 0 Circle. With. Static. Variables object args main’s frame circle 1 circle 2 radius Circle. With. Static. Variables object radius Frame Stack 1. 0 5. 0 Heap

Constructor terminates and address is assigned into reference Circle. With. Static. Variable class (not instance) with static data num. Of. Objects 2 Circle. With. Static. Variables object args main’s frame circle 1 circle 2 radius Circle. With. Static. Variables object radius Frame Stack 1. 0 5. 0 Heap

Arrays of Objects n n Array elements are references So, there is a reference that points to the array, and the array in turn points to objects.

Application using an array of Circle Objects – similar to Listing 7. 10 pp 251 -252

Create the local variable…a reference to an array of circle objects. NOT an array. NOT a circle object. main’s frame args circle Array Frame Stack Heap

Method call. Frame goes on stack. create Circle Array’s frame main’s frame circle Array i args circle Array Frame Stack Heap

create Circle Array’s frame main’s frame Instantiate the array (not the Circle objects). circle Array i args circle Array Frame Stack 0 1 2 Heap 3 9

new. Radius constructor frame this create Circle Array’s frame main’s frame 52. 3 Circle object circle Array i Instantiate a Circle object. Constructor is invoked. radius 0 52. 3 args circle Array Frame Stack 0 1 2 Heap 9

Constructor terminates. Return value of new is assigned into array element. create Circle Array’s frame main’s frame Circle Object circle Array i radius 0 52. 3 args circle Array Frame Stack 0 1 2 Heap 9

new. Radius constructor frame this create Circle Array’s frame main’s frame 28. 4 i Circle Object circle Array 1 radius 52. 3 28. 4 Instantiate another Circle object. Constructor is invoked. args circle Array Frame Stack 0 1 2 Heap 9

Constructor terminates. Return value of new is assigned into next array element. create Circle Array’s frame main’s frame Circle Object circle Array i 1 Circle Object radius 52. 3 28. 4 args circle Array Frame Stack 0 1 2 Heap 9

Eventually, array is filled. Array reference gets returned. Return value is assigned into main’s local variable. Circle Object main’s frame Circle Object radius 52. 3 28. 4 93. 7 11. 9 args circle Array Frame Stack 0 1 2 Heap 9
- Slides: 28