bank account example public class bankaccount { private double balance; public static int...
DESCRIPTION
Method Area Heap Driver class Constant Pool “BankAccount” a “BankAccount” b 100 Methods main() Parameters Local variables Frame data Operand stack * 100 args[0]… // Driver.java public static void main( String[] args ) { BankAccount a = new BankAccount(); BankAccount b = new BankAccount(); b.deposit( 100 ); } A stack frame for the BankAccount constructor is pushed into the Java stack Parameters BankAccount() Parameters Frame data Parameters Operand stack Local variables BankAccount class Constant Pool 0 Methods BankAccount() deposit( double ) pointer * A pointer to the BankAccount class data is created A pointer to the BankAccount pointer in the heap is created (Constant Pool Resolution) ab ClassLoader loads BankAccount to the method areaTRANSCRIPT
![Page 1: Bank Account Example public class BankAccount { private double balance; public static int totalAccounts = 0; public BankAccount() { balance = 0; totalAccounts++;](https://reader036.vdocuments.mx/reader036/viewer/2022081507/5a4d1ae27f8b9ab059977c72/html5/thumbnails/1.jpg)
Bank Account Examplepublic class BankAccount { private double balance; public static int totalAccounts = 0; public BankAccount() { balance = 0; totalAccounts++; } public void deposit( double amount ) { balance += amount; }}
public class Driver { public static void main( String[] args ) { BankAccount a = new BankAccount(); BankAccount b = new BankAccount(); b.deposit( 100 ); }}
![Page 2: Bank Account Example public class BankAccount { private double balance; public static int totalAccounts = 0; public BankAccount() { balance = 0; totalAccounts++;](https://reader036.vdocuments.mx/reader036/viewer/2022081507/5a4d1ae27f8b9ab059977c72/html5/thumbnails/2.jpg)
Method Area Heap
Driver class
Constant Pool“BankAccount” a“BankAccount” b
100
Methodsmain()
// In command promptjava Driver
// In Java Virtual MachineDriver.main( args )
A stack frame for main() is pushed
into the Java stack
main()
Parameters
Local variables
Frame data
Operand stack
*
100
args[0] …
a b
ClassLoader loads Driver to the method
area
![Page 3: Bank Account Example public class BankAccount { private double balance; public static int totalAccounts = 0; public BankAccount() { balance = 0; totalAccounts++;](https://reader036.vdocuments.mx/reader036/viewer/2022081507/5a4d1ae27f8b9ab059977c72/html5/thumbnails/3.jpg)
Method Area Heap
Driver class
Constant Pool“BankAccount” a“BankAccount” b
100
Methodsmain()
main()
Parameters
Local variables
Frame data
Operand stack
*
100
args[0] …// Driver.javapublic static void main( String[] args ) {
BankAccount a = new BankAccount();BankAccount b = new BankAccount();b.deposit( 100 );
}
A stack frame for the BankAccount
constructor is pushed into the Java
stack
Parameters
BankAccount()
Parameters
Frame data
Parameters
Operand stack
Local variables
BankAccount class
Constant Pool0
MethodsBankAccount()
deposit( double )
pointer
*
A pointer to the BankAccount class
data is created
A pointer to the BankAccount
pointer in the heap is created (Constant
Pool Resolution)
a b
ClassLoader loads BankAccount to the
method area
![Page 4: Bank Account Example public class BankAccount { private double balance; public static int totalAccounts = 0; public BankAccount() { balance = 0; totalAccounts++;](https://reader036.vdocuments.mx/reader036/viewer/2022081507/5a4d1ae27f8b9ab059977c72/html5/thumbnails/4.jpg)
Method Area Heap
Driver class
Constant Pool“BankAccount” a“BankAccount” b
100
Methodsmain()
pointer
balance
0.0
BankAccount class
Constant Pool0
MethodsBankAccount()
deposit( double )
Static VariablestotalAccounts
0
main()
BankAccount()
Parameters
Local variables
Frame data
Operand stack
Parameters
Frame data
Parameters
*
*
Operand stack
args[0] …
Local variables
// BankAccount.javaprivate double balance;private static int totalAccounts = 0;
public BankAccount() {balance = 0;totalAccounts++;
}
public void deposit( double amount ) {balance += amount;
}
The balance variable of this instance is initialized with a
default value
The totalAccounts static variable of BankAccount is initialized with a default value and
then assigned with 0
The balance variable of this instance is assigned with 0
totalAccounts is incremented by 1
1
100
a b
![Page 5: Bank Account Example public class BankAccount { private double balance; public static int totalAccounts = 0; public BankAccount() { balance = 0; totalAccounts++;](https://reader036.vdocuments.mx/reader036/viewer/2022081507/5a4d1ae27f8b9ab059977c72/html5/thumbnails/5.jpg)
Method Area Heap
Driver class
Constant Pool“BankAccount” a“BankAccount” b
100
Methodsmain()
main()
Parameters
Local variables
Frame data
Operand stack
*
args[0] …// Driver.javapublic static void main( String[] args ) {
BankAccount a = new BankAccount();BankAccount b = new BankAccount();b.deposit( 100 );
}Parameters
BankAccount()
Parameters
Frame data
Parameters
Operand stack
Local variables
BankAccount class
Constant Pool0
MethodsBankAccount()
deposit( double )
pointer
*
Static VariablestotalAccounts
1
*
The stack frame for the BankAccount
constructor is popped from the
Java stack
a b
balance
0.0
100
The pointer is returned to the calling frame
The pointer is popped from the operand stack
and assigned to a
![Page 6: Bank Account Example public class BankAccount { private double balance; public static int totalAccounts = 0; public BankAccount() { balance = 0; totalAccounts++;](https://reader036.vdocuments.mx/reader036/viewer/2022081507/5a4d1ae27f8b9ab059977c72/html5/thumbnails/6.jpg)
Method Area Heap
Driver class
Constant Pool“BankAccount” a“BankAccount” b
100
Methodsmain()
main()
Parameters
Local variables
Frame data
Operand stack
*
args[0] …// Driver.javapublic static void main( String[] args ) {
BankAccount a = new BankAccount();BankAccount b = new BankAccount();b.deposit( 100 );
}
A stack frame for the BankAccount
Constructor is pushed into the Java
stack
Parameters
BankAccount()
Parameters
Frame data
Parameters
Operand stack
Local variables
BankAccount class
Constant Pool0
MethodsBankAccount()
deposit( double )
A pointer to the BankAccount class
data is created
pointer
balance
0.0
pointer
*
Static VariablestotalAccounts
1
100
A pointer to the BankAccount
pointer in the heap is created (Constant
Pool Resolution)Since the BankAccount class was already loaded in the method area,
no other loading happens
a b
![Page 7: Bank Account Example public class BankAccount { private double balance; public static int totalAccounts = 0; public BankAccount() { balance = 0; totalAccounts++;](https://reader036.vdocuments.mx/reader036/viewer/2022081507/5a4d1ae27f8b9ab059977c72/html5/thumbnails/7.jpg)
Method Area Heap
Driver class
Constant Pool“BankAccount” a“BankAccount” b
100
Methodsmain()
balance
0.0
BankAccount class
Constant Pool0
MethodsBankAccount()
deposit( double )
Static VariablestotalAccounts
1
main()
BankAccount()
Parameters
Local variables
Frame data
Operand stack
Parameters
Frame data
Parameters
*
Operand stack
args[0] …
Local variables
// BankAccount.javaprivate double balance;private static int totalAccounts = 0;
public BankAccount() {balance = 0;totalAccounts++;
}
public void deposit( double amount ) {balance += amount;
}
pointer
balance
0.0
pointer
*
Nothing happens since the
totalAccounts was already initialized
when the BankAccount class
was first loaded
totalAccounts is incremented by 1
2
100
a b
The balance variable of this instance is initialized with a
default value
The balance variable of this instance is assigned with 0
![Page 8: Bank Account Example public class BankAccount { private double balance; public static int totalAccounts = 0; public BankAccount() { balance = 0; totalAccounts++;](https://reader036.vdocuments.mx/reader036/viewer/2022081507/5a4d1ae27f8b9ab059977c72/html5/thumbnails/8.jpg)
Method Area Heap
Driver class
Constant Pool“BankAccount” a“BankAccount” b
100
Methodsmain()
main()
Parameters
Local variables
Frame data
Operand stack
*
args[0] …// Driver.javapublic static void main( String[] args ) {
BankAccount a = new BankAccount();BankAccount b = new BankAccount();b.deposit( 100 );
}Parameters
BankAccount()
Parameters
Frame data
Parameters
Operand stack
Local variables
BankAccount class
Constant Pool0
MethodsBankAccount()
deposit( double )
*
Static VariablestotalAccounts
2
*
pointer
balance
0.0
balance
0.0
pointer
100
a b
The stack frame for the BankAccount
Constructor is popped from the
Java stack
The pointer is popped from the operand stack
and assigned to b The pointer is returned to the calling frame
![Page 9: Bank Account Example public class BankAccount { private double balance; public static int totalAccounts = 0; public BankAccount() { balance = 0; totalAccounts++;](https://reader036.vdocuments.mx/reader036/viewer/2022081507/5a4d1ae27f8b9ab059977c72/html5/thumbnails/9.jpg)
Method Area Heap
Driver class
Constant Pool“BankAccount” a“BankAccount” b
100
BankAccount class
Constant Pool0
Methodsmain() Methods
BankAccount()deposit( double ) pointer
pointer
balance
0.0
balance
0.0
Static VariablestotalAccounts
2
main()
Parameters
Local variables
Frame data
Operand stack
*
args[0] …// Driver.javapublic static void main( String[] args ) {
BankAccount a = new BankAccount();BankAccount b = new BankAccount();b.deposit( 100 );
}Parameters
deposit( double )
Parameters
Frame data
Parameters
Operand stack
Local variables
b
The object reference to the instance is always put as the first local variable of a stack frame
100
a b
b
amount=100
A stack frame for the deposit method of instance ‘b’ is
pushed into the Java stack
100 is popped from the operand stack
and put into the next frame’s parameters
![Page 10: Bank Account Example public class BankAccount { private double balance; public static int totalAccounts = 0; public BankAccount() { balance = 0; totalAccounts++;](https://reader036.vdocuments.mx/reader036/viewer/2022081507/5a4d1ae27f8b9ab059977c72/html5/thumbnails/10.jpg)
Method Area Heap
Driver class
Constant Pool“BankAccount” a“BankAccount” b
100
BankAccount class
Constant Pool0
Methodsmain() Methods
BankAccount()deposit( double ) pointer
pointer
balance
100.0
balance
0.0
Static VariablestotalAccounts
2
main()
BankAccount()
Parameters
Local variables
Frame data
Operand stack
Parameters
Frame data
Parameters
*
Operand stack
args[0] …// BankAccount.javaprivate double balance;private static int totalAccounts = 0;
public BankAccount() {balance = 0;totalAccounts++;
}
public void deposit( double amount ) {balance += amount;
}
Local variables
The frame knows which balance to
modify because of the object reference
a b
b
amount=100
0.0