java program = collection of classes class::object abstract concept instances of the class...

58
Program = collection of Cl lass::Object bstract concept instances of the cla ankAccount::BankAccountOfJohnSmith#127

Upload: chrystal-mckenzie

Post on 01-Jan-2016

229 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Java Program = collection of Classes

Class::Object

abstract conceptinstances of the class

BankAccount::BankAccountOfJohnSmith#127

Page 2: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

class class-name [extends superclass name] [implements interface name] { [Declaration of variables] [Declaration of methods]}

Defining a class

Page 3: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Instance variablespublic class Book { public String title,author,publisher; public int pages; public double price; ...} Book textbook=new Book();

textbook.title=“JAVA – Introduction to CS and programming”;textbook.author=“W. Savitch”;textbook.publisher=“Prentice Hall”;textbook.pages=1052;...

(file Book.java)

Page 4: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Instance variablespublic class ToyBankAccount { public String ownersName; public double savingsBalance,checkingBalance; public double penalty; public int pin; ...}

ToyBankAccount johnsAccount;johnsAccount=new BankAccount();johnsAccount.ownersName=“John Smith”;johnsAccount.savingsBalance=1000.0;johnsAccount.checkingBalance=500;johnsAccount.pin=7534;...

(file ToyBankAccount.java)

Page 5: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Instance methodspublic class ToyBankAccount { ............ ............ /* * returns true if the withdrawal from checking is succesful */ public boolean withdrawMoney(int pin,double amount) { if (pin==this.pin) { if (checkingBalance>amount) { checkingBalance-=amount; return true; } } return false; }}

Page 6: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Instance methodspublic class ToyBankAccount { ............ ............ /* * returns true if the check clears. */ public boolean payCheck(double amount) { if (checkingBalance>amount) { checkingBalance-=amount; return true; } else { penalty+=25.0; return false; } } }}

Page 7: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Instance methodspublic class ToyBankAccount { ............ ............ /* * returns true if the check clears. */ public boolean payCheck(double amount) { if (checkingBalance>amount) { checkingBalance-=amount; return true; } else { penalty+=25.0; return false; } } }} Not a good programming practice!

Page 8: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Constantspublic class ToyBankAccount { public static final int PENALTY_FOR_CHECK_OVER_LIMIT=25; ............ /* * returns true if the check clears. */ public boolean payCheck(double amount) { if (checkingBalance>amount) { checkingBalance-=amount; return true; } else { penalty+= PENALTY_FOR_CHECK_OVER_LIMIT; return false; } } }}

Page 9: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Parameters

withdrawalOK=johnsAccount.withdrawMoney(7534,500);

formal parameters

actual parameters

object method

public boolean withdrawMoney(int pin,double amount) { if (pin==this.pin) { if (checkingBalance>amount) { checkingBalance-=amount; return true; } } return false; }

Page 10: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Return type public boolean withdrawMoney(int pin,double amount) { if (pin==this.pin) { if (checkingBalance>amount) { checkingBalance-=amount; return true; } } return false; }

withdrawalOK=johnsAccount.withdrawMoney(7534,500);

Page 11: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Return type - void

johnsAccount.depositMoney(500);

public void depositMoney(double amount) { checkingBalance+=amount; }

Page 12: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Creating objects - newToyBankAccount johnsAccount;johnsAccount=new ToyBankAccount();

johnsAccount is a variable which canpoint to an object of type ToyBankAccount

create a new object of type ToyBankAccountand let johnsAccount point to it

Page 13: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

ConstructorToyBankAccount johnsAccount;johnsAccount=new ToyBankAccount();

Call to a special method ofthe class – constructor.

public ToyBankAccount() {}default constructor is

Page 14: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Constructorpublic ToyBankAccount(String ownersName, double checkingInitialAmount, int pin) { checkingAmount=checkingInitialAmount; savingsAcount=penalty=0; this.pin=pin; this.ownersName=new String(ownersName);}

ToyBankAccount johnsAccount;johnsAccount=new ToyBankAccount(“John Smith”,0,1234);

Page 15: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Constructor - overloading

public ToyBankAccount(String ownersName, int checkingInitialAmount, int pin) { checkingAmount=checkingInitialAmount; savingsAcount=penalty=0; this.pin=pin; this.ownersName=new String(ownersName);}

public ToyBankAccount(String ownersName, int pin) { savingsAcount=penalty=checkingInitialAmount=0; this.pin=pin; this.ownersName=new String(ownersName);}

Page 16: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Constructor - this()

public ToyBankAccount(String ownersName, int checkingInitialAmount, int pin) { checkingAmount=checkingInitialAmount; savingsAcount=penalty=0; this.pin=pin; this.ownersName=new String(ownersName);}

public ToyBankAccount(String ownersName, int pin) { this(ownersName,0,pin);}

(must be first statement)

Page 17: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

public/private for instance variablespublic – anybody can accessprivate – only methods of the class can access

public class ToyBankAccount { public String ownersName; public double savingsBalance,checkingBalance; public double penalty; public int pin; ...}

Page 18: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

ToyBankAccount johnsAccount;johnsAccount=new ToyBankAccount(“John Smith”,100,1234);

johnsAccount.savingsAccount+=50;

Not good. Suppose that we want to modifythe code to store all transactions.

Have to find all occurences of

public/private for instance variables

Page 19: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

public/private for instance variablespublic – anybody can accessprivate – only methods of the object can access

public class ToyBankAccount { private String ownersName; private double savingsBalance,checkingBalance; private double penalty; private int pin; ...} Instance variables should be private

Page 20: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

public class Book { private String title,author,publisher; private int pages; private double price;

public String getTitle() { return title; } public void setTitle(String title) { this.title=title; }}

Accessor/Mutator methods

Page 21: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

public for classes

in each file:

one public class withthe same name as the filename

any number of classes whichare visible only to classes inthe file

Page 22: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

ToyBankAccount johnsAccount;johnsAccount=new ToyBankAccount(“John Smith”,0,1234);

Variablesof primitive typeof class type

int x;

ToyBankAccount marysAccount=johnsAccount;marysAccount.depositMoney(1000);System.out.println(“”+johnsAccount.balance())

Page 23: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

ToyBankAccount johnsAccount;johnsAccount=new ToyBankAccount(“John Smith”,0,1234);ToyBankAccount marysAccount=johnsAccount;marysAccount.depositMoney(1000);System.out.println(“”+johnsAccount.balance())

Variables

marysAccount johnsAccount

int x;x=10;int y=x;y+=10

Page 24: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Privacy leaksprivate Address ownersAddress ;

public Address getOwnersAddress() { return ownersAddress; }

address=johnsAccount.getOwnersAddress();

address.set(“John Evil,....”);

Page 25: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Privacy leaksprivate Address ownersAddress ;

public Address getOwnersAddress() { return new Address(ownersAddress); }

address=johnsAccount.getOwnersAddress();

address.set(“John Evil,....”);

Page 26: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

null

ToyBankAccount johnsAccount=null;

does not point to any object...

Page 27: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

“null Pointer Exception” error

johnsAccount.depositMoney(100);

Page 28: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

==, = and equalsfor variables of class type == testswhether they point to the same object.

String s=“abc”, t=“abc”;if (s==t) system.out.println(“You win $1,000,000”);

Page 29: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

==, = and equalsfor variables of class type == testswhether they point to the same object.

String s=“abc”, t=“abc”;if (s.equals(t)) system.out.println( “You were chosen for the next round!”);

You have to implement equals method if you want “deeper” equality testing for your class.

Page 30: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

==, = and equals

You have to implement equals method if you want “deeper” equality testing for your class.

boolean equals(Book s) { return author.equals(s.author)&& title.equals(s.title)&& ... ;}

Page 31: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Method overloading

public void depositMoney(double amount,Currency currency) { checkingBalance+=Currency.Convert(amount,currency,Currency.USD);}

public void depositMoney(double amount) { checkingBalance+=amount; }

JohnsAccount.depositMoney(100,Currency.SKK);JohnsAccount.depositMoney(100);

Page 32: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Method overloading

public void depositMoney(double amount,Currency currency) { checkingBalance+=Currency.Convert(amount,currency,Currency.USD);}

public void depositMoney(double amount) { checkingBalance+=amount; }

public void depositMoney(double amountInSkk) { checkingBalance+=amount*50; }

Page 33: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Method overloading

public void depositMoney(double amount,Currency currency) { checkingBalance+=Currency.Convert(amount,currency,Currency.USD);}

public void depositMoney(double amount) { checkingBalance+=amount; }

public char depositMoney(double amountInSkk) { checkingBalance+=amount*50; }

cannot overload based on the returned type

Page 34: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Automatic conversion

johnsAccount.depositMoney(500);

public void depositMoney(double amount) { checkingBalance+=amount; }

int

Page 35: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Class variablespublic class ToyBankAccount { private static int totalAccounts=0; private static totalAccountBalance;

private String ownersName; private double savingsBalance,checkingBalance; private double penalty; private int pin; ...}

Page 36: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Class variablespublic class ToyBankAccount { private static int totalAccounts=0;{totalAccounts++;} private static totalAccountBalance;

private String ownersName; private double savingsBalance,checkingBalance; private double penalty; private int pin; ...}

initializer block

Page 37: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Class variablespublic class ToyBankAccount { private static final int PENALTY_FOR_CHECK_OVER_LIMIT=25;

private static int totalAccounts=0; private static totalAccountBalance;

private String ownersName; private double savingsBalance,checkingBalance; private double penalty; private int pin; ...}

Page 38: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Class methods public class ToyBankAccount { private static final int PENALTY_FOR_CHECK_OVER_LIMIT=25;

private static int totalAccounts=0; private static double totalAccountBalance;

.....

public static AverageBalance() { return totalAccountBalance/totalAccounts; }}

Page 39: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Class methods public static AverageBalance()

public endOfMonthUpdate() { if (balance>AverageBalance()) balance+=BONUS;}

class methods cannot use instance fields or methods

Page 40: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Class methods public static AverageBalance()

class Bank { public monthlyReport() { system.out.print(Account.AverageBalance()); }}

Page 41: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Class methods example - Math

Math.sqrt()

can use to group methods which havesomething in common

Page 42: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Instance vs Class methods

public boolean bigger(Account a) { return (balance>a.balance);}

public static boolean bigger(Account a,Account b) { return (a.balance>b.balance);}

(a.bigger(b))

(Account.bigger(a,b))

Page 43: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

main

public static void main(String[] args) {

}

can be defined for any class, not just forthe one that is running (good for debugging)

Page 44: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Garbage collectionToyBankAccount johnsAccount;johnsAccount=new ToyBankAccount(“John Smith”,0,1234);

johnsAccount=null;

Page 45: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

EXERCISE #1:public class ToyBankAccount { private String ownersName; private double savingsBalance,checkingBalance; private double penalty; private int pin; ...}

1a) implement method transferSavingToChecking

1b) implement method transferToAccount

1c) implement method transferBetweenAccounts (takes two accounts and amount)

Page 46: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

Default initialization

instance variables are initialized to the default value (zero for numericalclasses, false for boolean)

(this is not true for local variables (i.e. variablesdeclared in methods))

Page 47: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

EXERCISE #2:Class Test { private int x,y; public Test(int x,int y) { x=x; this.y=y; System.out.println(“”+x+”,”,y); } public Values() { System.out.println(“”+x+”,”+y); }}

public class Runs { public main(String[] args) { Test r,p; r=new Test(2,3); r.Values(); p=r; p=new Test(3,4); r.Values(); }}

What is the output?

Page 48: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

EXERCISE #3:public class Runs { public main(String) { int x=14,y=7,z=5,i;

for (i=0;i<300;i++) { x = x+y+z; y = x-y-z; z = x-y-z; x = x-y-z; } System.out(“”+x+”,”+y+”,”+z); }}

What is the output?

Page 49: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

EXERCISE #4:public class MyClass { private int data; public boolean equals(MyClass a) { return (this==a) } public MyClass(int x) { data=x; }}

MyClass a,b;a=new MyClass(3); b=a;System.out.println(a.equals(b));b=new MyClass(3);System.out.println(a.equals(b));

What is the output?

Page 50: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

EXERCISE #5:public class MyClass { private int data; public boolean equals(MyClass a) { return (this.data==a.data) } public MyClass(int data) { data=data; }}

MyClass a,b;a=new MyClass(3); b=a;System.out.println(a.equals(b));b=new MyClass(4);System.out.println(a.equals(b));

What is the output?

Page 51: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

EXERCISE #6:public class MyClass { private String name; public boolean equals(MyClass a) { return (this.name==a.name) } public MyClass(String name) { this.name=name; }}

MyClass a,b;a=new MyClass(“John”); b=a;System.out.println(a.equals(b));b=new MyClass(“John”);System.out.println(a.equals(b));

What is the output?

Page 52: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

public class myInt { public int x;}

myInt a = new myInt(); a.x = 10; myInt b = a; System.out.println("a = "+a.x+"; b = "+b.x); b.x = 20; System.out.println("a = "+a.x+"; b = "+b.x);

EXERCISE #7:What is the output?

Page 53: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

public class myInt { public int x; public static void switch(myInt a,myInt b) { int c; c=a.x; a.x=b.x; b.x=c; } public static void switch(int a,int b) { int c; c=a; a=b; b=c; }}

myInt a = new myInt(); a.x = 10; myInt b = new myInt(); b.x = 20;myInt.switch(a.x,b.x);System.out.println("a = "+a.x+"; b = "+b.x); myInt.switch(a.b);System.out.println("a = "+a.x+"; b = "+b.x);

EXERCISE #8:What is the output?

Page 54: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

public class myString{ public String x; public static void switch(myInt a,myInt b) { String c; c=a.x; a.x=b.x; b.x=c; } public static void switch(String a,String b) { String c; c=a; a=b; b=c; }}

myString a = new myString(); a.x = “10”; myString b = new myString(); b.x = “20”;myString.switch(a.x,b.x);System.out.println("a = "+a.x+"; b = "+b.x); myString.switch(a.b);System.out.println("a = "+a.x+"; b = "+b.x);

EXERCISE #9:What is the output?

Page 55: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

EXERCISE #10:What is the output?class Test {

public int x; public static int y;

public Test(int x,int y) { this.x=x; this.y=y; }}

Test a,b; a=new Test(3,4); System.out.println(""+a.x+","+a.y); b=new Test(5,6); System.out.println(""+b.x+","+b.y); System.out.println(""+a.x+","+a.y);

Page 56: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

EXERCISE #11:What is the output?

public class Test { static Test first=null; Test next; public int x;

public Test(int x) { this.x=x; next=first; first=this; }

public static void list() { for (Test p=first;p!=null;p=p.next) System.out.println(" "+p.x); }

public static void main(String[] args) { Test a=new Test(2),b=new Test(3),c=new Test(4); Test.list(); }}

Page 57: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

EXERCISE #12:Where is the error?

public class Test { Test next; public int x;

public void print() { int y; while (y<10) { System.out.println(x+y); y++; } } public static void main(String[] args) { Test a=new Test(); a.print(); }}

Page 58: Java Program = collection of Classes Class::Object abstract concept instances of the class BankAccount::BankAccountOfJohnSmith#127

EXERCISE #13:Where are the errors

public class Test { Test next; public int x;

public Test(int x) { Test.x=x; }

public static void main(String[] args) { double y=1; Test a=new Test(y); }}