Static methods ? ================ Most methods in Java are NOT static. Standard methods act on an instance of the class, have access to the data-fields of that instance, and may invoke other standard methods on this instance. e.g. in the BankAccount class: public int transaction(int amount) { if (amount > 0) deposit(amount); else withdraw(-amount); return balance; } we can directly access the "balance" as if it were a local variable, and we can invoke "deposit" and "withdraw" methods WITHOUT specifying explicitly which bank account we want to deposit into or withdraw from. But we do so initially in our test class: BankAccount acc = new BankAccount(); acc.transaction(100); Static methods work differently: they can ONLY access static data-fields and can ONLY invoke static methods directly. If they want to invoke a standard method, they need to use the "OBJECT.METHODNAME(ARGS)" syntax. In the first version of the BankAccount class we had: public static BankAccount openAccount() { BankAccount newAccount = new BankAccount(); newAccount.id = idCounter++; System.out.println("Created new account with Id = " + newAccount.id); return newAccount; } Actually, we can turn "transaction" into a static method, but we need to supply the appropiate BankAccount explicitly: public static int transaction(BankAccount ba, int amount) { if (amount > 0) ba.deposit(amount); else ba.withdraw(-amount); return ba.balance; } The test call then would be: BankAccount acc = new BankAccount(); transaction(acc, 100); When do use static methods? =========================== rarely, like "main" or for utility methods that don't really work on instances of some class anyway, like "Math.random()" or "Math.exp"