Title: Methods, classes, and Objects
1Methods, classes, and Objects
2Question
- Which of the following access modifiers is the
default modifier? - public
- private
- protected
- package
3Question 2
- Which of the following access modifiers is needed
to enable a class to be used without being
instantiated? - Public, private, static, void, protected
4Question 3
- Methods are invoked using parameters
- System.out.printlin(With raise, salary is
newamount) - Method headers have arguments
- Println(string args)
- Do the parameters and arguments occupy the same
locations in memory?
5Question 4
- In the statement
- System.out.printlin(With raise, salary is
newamount) - Println() is the method name?
- What is System?
- What is out?
6Using Methods, classes, and Objects
- Methods are similar to procedures, functions, or
subroutines - Statements within a method execute only when the
method is called - To execute a method, you call it from another
method - The calling method makes a method call
- Execution starts with the main method
7Simple methods.
- Dont require any data items (arguments or
parameters), nor do they return any data items
back - You can create any method once and use it many
times in different contexts
8Example
- Public class First
-
- Public static void main(String args)
-
- System.out.println(First Java application)
-
9Method Declaration
- Is the first line or header of a method and
contains - Optional access modifiers
- The return type for the method
- The method name
- An opening parenthesis
- An optional list of method arguments separated by
commas - A closing parenthesis
10Access Modifiers
- public accessible anywhere
- private accessible only within the class in
which it is defined - protected accessible only to derived
(inherited) classes only - package is the default
- static does not require instantiation before it
can be used and remains in place after use,
without being destroyed
11Implementation hiding
- The encapsulation of method details within a
class - You dont know the algorithm being used inside
the method - prinAndInter intrRate prin prin
- prinAndIntr (1intrRate) prin
12Implementation hiding
- We use televisions, telephones, computers,
automobiles without understanding much about
their internal mechanisms
13Method declaration
- modifiers name(arg_type arg1, arg_type arg2,
arg_type arg3) - HOWEVER,
- modifiers name(arg_type arg1, arg2, arg 3)
- IS INCORRECT!!
- Each arg must be preceded by its own data type
14Argument types
- Can be any of the primitive types
- Can be any of the predefined class types
- Assume a class customer exists
- Public void approveCredit(customer oneCustomer)
15Consider the following
- Public static void predictRaise(double
moneyAmount) - Double newAmount
- newAmount moneyAmount 1.1
- System.out.println(With raise, salary is
newAmount)
16Now consider this
- Public static void predictRaise(double
moneyAmount) - Double newAmount
- newAmount moneyAmount 1.1
- System.out.println(With raise, salary is
newAmount) - moneyAmount 10000
17Would this change ..
- The value of salary in
- predictRaise(salary)
- ???
18No
- Because Java supports passing of values rather
than passing addresses, so - The values of the parameters in the calling
statement are copied into the arguments of the
header. - The parameters and their associated arguments
occupy different locations in memory - C supports both pass-by-address and
pass-by-value
19Further, at the end of
- the usage of predictRaise(salary) the storage
used by the instantiation of the method is
released back, unless the method is declared
static, so the assignment of 10000 to moneyAmount
is lost
20- public class DemoRaise
-
- public static void main(String args)
-
- double mySalary 200.00
- double moneyAmount 800.00
- System.out.println("Demonstrating some
raises") - predictRaise(400.00)
- predictRaise(mySalary)
- predictRaise(moneyAmount)
-
- public static void predictRaise(double
moneyAmount) -
- double newAmount
- newAmount moneyAmount 1.10
- System.out.println("With raise, salary
is " newAmount) -
-
21Creating Methods that Require Multiple Arguments
- Public static void predictRaiseUsingRate(double
money, double rate) -
- double newAmount
- newAmount money (1 rate)
- System.out.println(With raise, new salary is
newAmount)
22In the above
- The order in which the paramters are passed must
be consistent with the order in which the
arguments are declared in the header - money
- rate
23Creating Methods that Return Values
- Public static double predictRaise(double
moneyAmount) -
- double newAmount
- newAmount moneyAmount 1.1
- Return newAmount
-
- Whats different???
24This method would be invoked using
- Double mySalary
- Double myNewSalary
- mySalary 1000
- myNewSalary predictRaise(mySalary)
25Could also do something like
- System.out.println(New salary is
calculateRaise(mySalary)) - OR
- SpendingMoney calculateRaise(mySalary)
expenses
26Learning about Class Concepts
- When thinking in objects, everything is an
object, and every object is a member of a class - Your desk is a member of the class that includes
all desks and your car is a member of the class
that includes all cars - These are called is-a-relationshipsrelationships
in which the object is a member of the class
27An object
- Is an instantiation of a class (one tangible
example of a class) - A Buick, a Toyota Camry, and a Volkswagon Jetta
are all instantiations of the class automobile
28Creating a Class
- Begins with a header declaration
- Continues with the body
- Data fields (instance variables)
- Methods
- Fields are named variables that you declare
within a class, but outside of any method - Data fields are also called instance variables
29Class header declaration (one or more)
- An optional access modifier
- The keyword class
- Any legal identifier you choose for the name of
your class - Public class employee
30Fields (also called data fields)
- Are instance variables
- Are accessible to all methods within the class
- Are usually declared private
- If private, they can only be accessed (read or
changed) by methods within the class - This is called information hiding
31Information Hiding
- Class fields are declared private
- Class methods are declared public
- The only way another class can access a classs
fields is by use of one of its public methods
32Creating Instance Methods in a Class
- Public class employee
-
- private int empNum
- public int getEmpNum()
-
- return empNum
-
-
- This is an instance method that assumes empNum
has been defined
33Instance Methods
- Unlike class methods, instance methods do not
employ the static modifier. - Static is used for class-wide methods, but not
for methods that belong to objects - When you are creating a main method within a
class, many of the methods invoked by the main
will be declared static so they can be invoked
without calling them from within the main
34More on Instance Methods
- However, if you are creating a class from which
objects will be instantiated, most methods will
probably be non-static because you will associate
the methods with individual objects
35Declaring Objects and Using their Methods
- Declaring a class does not create any objects
- A class is just an abstract description of an
object - Suppose a class Employee has been defined
- Employee someEmployee
- Creates an instance of Employee
36Notice in the above
- That class names will begin with a cap
- Variables and instances of classes (objects) do
not - Just as a convention
37Declarations
- int someValue
- Complier sets aside space for someValue (4 bytes)
at compile time - Employee someEmployee
- Again, compiler is notified that you will use the
identifier someEmployee as an instance of the
class Employee
38Instantiations can be done as follows.
- Employee someEmployee
- someEmployee new Employee()
- Here you informed the compiler that the
identifier someEmployee will be an instance of
Employee and second, you told the compiler to set
aside enough space for the object (instance)
someEmployee at run time
39This is dynamic storage allocation
- The actual object someEmployee does not exist
until the new operator is encountered - You can use
- Employee someEmployee new Employee()
- Here you are declaring and establishing code to
create a new instance of the class Employee at
the same time
40Organizing Classes
- Public class employee
-
- private int empNum
- private String empLastName
- private String empFirstName
- private double empSalary
- // Methods will go next
41The following is also equally acceptable
- Public class employee
-
- private int empNum
- private String empLastName,
empFirstName - private double empSalary
- // Methods will go next
-
42Order..
- You can place the data and methods in any order
or mix them up
43Class Employee
- public void setEmpLastName(String name)
-
- empLastName name
-
- public String getEmpFirstName()
-
- return empFirstName
-
- public void setEmpFirstName(String name)
-
- empFirstName name
-
- public double getEmpSalary()
-
- return empSalary
-
- public void setEmpSalary(double sal)
-
- empSalary sal
- public class Employee
-
- private int empNum
- private String empLastName
- private String empFirstName
- private double empSalary
- public int getEmpNum()
-
- return empNum
-
- public void setEmpNum(int emp)
-
- empNum emp
-
- public String getEmpLastName()
-
- return empLastName
-
-
44An introduction to using Constructors
- Employee chauffeur new employee()
- Here you are calling a method named Employee()
that is provided by default by the Java compiler - It is a constructor that is provided by the
compiler
45Employee chauffeur new employee()Can also be
written
- Employee chauffeur
- Chauffer new employee()
- The first statement declares an object named
chauffeur - The second statement instantiates the object
named chauffeur - Memory is allocated when the second statement is
encountered
46Default constructors
- Are provided by the compiler when the user does
not provide one - They require no arguments
47When using the default constructor, it will
specify the following values for data fields
- Numeric fields are set to 0
- Character fields are set to Unicode \u0000
- Boolean fields are set to false
- Fields that are nonprimitive objects themselves
are set to null (or empty)
48If you dont like these default values, or if you
want to perform additional tasks when you create
an instance of a class,
- Then you must write your own constructor
- Any constructor you write must have the same name
as the class it constructs and constructor
methods cannot have a return type
49- public class ComputeCommission
-
- public static void main(String args)
-
- char vType 'S'
- int value 23000
- double commRate 0.08
- computeCommission(value, commRate,
vType) - computeCommission(40000, 0.10, 'L')
-
- public static void computeCommission(int
value, - double rate, char vehicle)
-
- double commission
- commission value rate
- System.out.println("\nThe " vehicle
- " type vehicle is worth " value)
- System.out.println("With " (rate
100) - " commission rate, the commission
is "