Java Program = collection of Classes
description
Transcript of Java Program = collection of Classes
Java Program = collection of Classes
Class::Object
abstract conceptinstances of the class
BankAccount::BankAccountOfJohnSmith#127
class class-name [extends superclass name] [implements interface name] { [Declaration of variables] [Declaration of methods]}
Defining a class
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)
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)
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; }}
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; } } }}
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!
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; } } }}
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; }
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);
Return type - void
johnsAccount.depositMoney(500);
public void depositMoney(double amount) { checkingBalance+=amount; }
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
ConstructorToyBankAccount johnsAccount;johnsAccount=new ToyBankAccount();
Call to a special method ofthe class – constructor.
public ToyBankAccount() {}default constructor is
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);
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);}
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)
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; ...}
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
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
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
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
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())
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
Privacy leaksprivate Address ownersAddress ;
public Address getOwnersAddress() { return ownersAddress; }
address=johnsAccount.getOwnersAddress();
address.set(“John Evil,....”);
Privacy leaksprivate Address ownersAddress ;
public Address getOwnersAddress() { return new Address(ownersAddress); }
address=johnsAccount.getOwnersAddress();
address.set(“John Evil,....”);
null
ToyBankAccount johnsAccount=null;
does not point to any object...
“null Pointer Exception” error
johnsAccount.depositMoney(100);
==, = 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”);
==, = 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.
==, = 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)&& ... ;}
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);
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; }
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
Automatic conversion
johnsAccount.depositMoney(500);
public void depositMoney(double amount) { checkingBalance+=amount; }
int
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; ...}
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
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; ...}
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; }}
Class methods public static AverageBalance()
public endOfMonthUpdate() { if (balance>AverageBalance()) balance+=BONUS;}
class methods cannot use instance fields or methods
Class methods public static AverageBalance()
class Bank { public monthlyReport() { system.out.print(Account.AverageBalance()); }}
Class methods example - Math
Math.sqrt()
can use to group methods which havesomething in common
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))
main
public static void main(String[] args) {
}
can be defined for any class, not just forthe one that is running (good for debugging)
Garbage collectionToyBankAccount johnsAccount;johnsAccount=new ToyBankAccount(“John Smith”,0,1234);
johnsAccount=null;
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)
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))
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?
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?
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?
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?
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?
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?
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?
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?
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);
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(); }}
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(); }}
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); }}