Static Methods and Memory Management in Java
Static Methods
- Defined at the class level, not requiring an instance of the class.
- Example:
Math.sqrt()
,Math.max()
- Used for utility functions that don't rely on object state.
- Static methods are called using the class name, like
Math.methodName()
.
Non-Static Methods
- Require an object of the class to be instantiated to be called.
- Example: Methods that rely on instance variables.
Static Variables
- Defined with the
static
keyword. E.g.,static final int x = 5;
. - Cannot be changed after initialization when made final.
- Example: In the case of static constants, changing
x
results in a compilation error.
- Defined with the
Memory Management
- Two types: Stack and Dynamic memory.
- Stack Memory:
- Used for storing method calls and local variables in a Last In First Out (LIFO) order.
- Automatically managed by Java.
- Memory is allocated for method calls upon invoking them and freed when they return.
- Dynamic Memory:
- Manages memory allocation manually (typically in languages like C++).
Using Math Class:
- Utilizes static methods without needing to create a
Math
object. - Examples:
Math.max()
compares two numbers.Math.sqrt()
calculates the square root.
- Utilizes static methods without needing to create a
Execution Flow and Call Stack
- When a method is called, a new frame is created in the stack.
- Each frame has local variables and method parameters.
- As methods return, their frames are emptied, returning control to the previous method.
Stack Overflow
- Occurs when there is an infinite loop, filling up stack memory and resulting in an error.
Example of Call Stack:
- In the example of finding square of numbers, the main method reserves stack space for
a
,b
,c
, and results fromsquare()
calls. - When calling square with number 5, it computes and returns 25 back to the main method.
- Similarly, calls to
someSquare()
create additional frames to compute intermediate results (e.g., for values 2 and 3 respectively).
- In the example of finding square of numbers, the main method reserves stack space for
Visibility of Variables
- Variable scope is limited to the frame where they are defined.
- A variable in the main method cannot be accessed directly inside static or non-static method frames unless passed as arguments.
Understanding Stack and Frame Communication
- Methods communicate through return statements; if trying to access a variable outside its frame, an error occurs.
- Each frame handles its local scope, and they must return values to communicate results logically.
Questions from Students
- Importance of understanding frame size and memory limits.
- Clarification that mutual visibility of variables is restricted unless explicitly shared via parameters or returned values.