java – an object oriented language cs 307 lecture notes lecture weeks 5-6 (part 2) khalid siddiqui

53
Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Upload: angela-eaton

Post on 13-Jan-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Java – An Object Oriented Language

CS 307 Lecture Notes

Lecture Weeks 5-6 (part 2)

Khalid Siddiqui

Page 2: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Objectives

• Get an introduction to classes, objects, fields, constructors, and methods; get a general idea of how a small program is put together

• Get a feel for how methods call each other; learn about private and public methods

• Learn defining and calling methods and constructors

Page 3: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Objectives (Contd.):

• Learn how arguments are passed to methods and constructors and how to return values from methods

• Learn about static (class) and non-static (instance) fields and methods

Page 4: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Methods

• To define a method:– decide between public and private (usually public)– give it a name– specify the types of arguments (formal

parameters) and give them names– specify the method’s return type or chose void– write the method’s code

public [or private] returnType methodName (type1 name1, ..., typeN nameN){ ...} HeaderBody

Page 5: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Methods (cont’d)• A method is always defined inside a class.

• A method returns a value of the specified type unless it is declared void; the return type can be any primitive data type or a class type.

• A method’s arguments can be of any primitive data types or class types.

public [or private] returnType methodName ( ){ ... }

Empty parentheses indicate that a method takes no arguments.

Page 6: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Methods: Java Style

• Method names start with lowercase letters.

• Method names usually sound like verbs.

• The name of a method that returns the value of a field often starts with get:

getWidth, getX

The name of a method that sets the value of a field often starts with set:

setLocation, setText

Page 7: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Overloaded Methods

• Methods of the same class that have the same name but different numbers or types of arguments are called overloaded methods.

• Use overloaded methods when they perform similar tasks:

public void move (int x, int y) { ... }public void move (double x, double y) { ... }public void move (Point p) { ... }

public Fraction add (int n) { ... }public Fraction add (Fraction other) { ... }

Page 8: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Overloaded Methods (cont’d)• The compiler treats overloaded methods as

completely different methods.

• The compiler knows which one to call based on the number and the types of the arguments:

Circle circle = new Circle(5);

circle.move (50, 100);...Point center = new Point(50, 100);circle.move (center);...

public class Circle{ ...

public void move (int x, int y) { ... }

public void move (Point p) { ... } ...}

Page 9: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Constructors

• A constructor is like a method for creating objects of the class.

• A constructor often initializes an object’s fields.

• Constructors do not have a return type (not even void) and they do not return a value.

• All constructors in a class have the same name — the name of the class.

• Constructors may take arguments.

Page 10: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Constructors (cont’d)

• If a class has more than one constructor, they are “overloaded” and must have different numbers and/or types of arguments.

• Programmers often provide a “no-args” constructor that takes no arguments.

• If a programmer does not define any constructors, Java provides one default no-args constructor, which allocates memory and sets fields to the default values.

Page 11: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Constructors (cont’d)

public class Fraction{ private int num, denom;

public Fraction ( ) { num = 0; denom = 1; }

public Fraction (int n) { num = n; denom = 1; } Continued

public Fraction (int p, int q) { num = p; denom = q; reduce (); }

public Fraction (Fraction other) { num = other.num; denom = other.denom; } ...}

“No-args” constructor

Copy constructor

Page 12: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Constructors (cont’d)

• Constructors of a class can call each other using the keyword this — a good way to avoid duplicating code:

... public Fraction (int p, int q) { num = p; denom = q; reduce (); } ...

public class Fraction{ ...

public Fraction (int n) { this (n, 1); } ...

Page 13: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Operator new

• Constructors are invoked using new

Fraction f1 = new Fraction ( );

Fraction f2 = new Fraction (5);

Fraction f3 = new Fraction (4, 6);

Fraction f4 = new Fraction (f3);

0 / 1

5 / 1

2 / 3

2 / 3

Page 14: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Operator new (cont’d)

• You must create an object before you can use it; the new operator is a way to do it

Fraction f;

f= n ew Fraction (2, 3);

f = new Fraction (3, 4);

f is set to null

Now f refers to a valid object

Now f refers to another object (the old object is “garbage-collected”)

Page 15: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Static Fields• A static field (a.k.a. class field or class

variable) is shared by all objects of the class.

• A static field can hold a constant shared by all objects of the class:

• A non-static field (a.k.a. instance field or instance variable) belongs to an individual object.

public class RollingDie{ private static final double slowDown = 0.97; private static final double speedFactor = 0.04; ...

Reserved words:staticfinal

Page 16: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Static Fields (cont’d)

• Static fields are stored with the class code, separately from non-static fields that describe an individual object.

• Public static fields, usually global constants, are referred to in other classes using “dot notation”: ClassName.constName

double area = Math.PI * r * r;setBackground(Color.blue);c.add(btn, BorderLayout.NORTH);System.out.println(area);

Page 17: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Static Fields (cont’d)

• Usually static fields are NOT initialized in constructors (they are initialized either in declarations or in public static methods).

• If a class has only static fields and does not have any non-static (instance) fields, there is no point in creating objects of that class (all of them would be identical).

• Math and System are examples of the above. In fact, they have no public constructors and cannot be instantiated.

Page 18: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Static Methods

• Static methods can access and manipulate a class’s static fields.

• Static methods cannot access non-static fields or call non-static methods of the class.

• Static methods are called using “dot notation”: ClassName.statMethod(...)

double x = Math.random(); double y = Math.sqrt (x); System.exit();

Page 19: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Instance Methods

• Non-static methods are also called instance methods.

• An instance method is called for a particular object using “dot notation”:

objName.instMethod(...);

• Instance methods can access ALL fields and call ALL methods of their class — both class and instance fields and methods.

Page 20: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Static (Class) vs. Non-Static (Instance)public class MyClass{ public static final int statConst; private static int statVar; private int instVar; ... ...

public static int statMethod(...) { statVar = statConst; statMethod2(...);

instVar = ...; instMethod(...); } Continued

public int instMethod(...) { statVar = statConst; inst Var = statConst; instVar = statMethod(...); statVar = instMethod2(...); ... }

public int instMethod2(...) { ... } ...}

Error!

OK

All OK

Page 21: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Static vs. Non-Static (cont’d)

• Note: main is static and therefore cannot access non-static fields or call non-static methods of its class:

public class Hello{ private String message = "Hello, World";

public static void main (String[ ] args) { System.out.println (message); }}

Error:non-static variable message is used in static context (main)

Page 22: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Passing Arguments to Constructors and Methods

• Any expression that has an appropriate data type can serve as an argument:

double a = 3, b = -4; ... Polynomial p = new Polynomial(1.0, -(a + b), a * b); ... double y = p.getValue ( 2 * b - a);

Page 23: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Passing Arguments (cont’d)

• int is promoted to double when necessary:

• A “smaller” type can be promoted to a “larger” type (e.g., int to long, float to double).

The same as: ( 3.0 )

... Polynomial p = new Polynomial (1, -5, 6); double y = p.getValue ( 3 );

The same as: (1.0, -5.0, 6.0)

Page 24: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Passing Arguments (cont’d)

• Primitive data types are always passed “by value”: the value is copied into the parameter.

double x = 3.0; double y = p.getValue ( x );

public class Polynomial{ ... public double getValue (double u) { double v; ... }}

x: 3.0

y:

u: 3.0

v:

copy

u acts like a local variable in getValue

Page 25: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Passing Arguments (cont’d)• The original argument remains unchanged:

public class MyMath{ ... public double square (double x) { x *= x; return x; }}

MyMath calc = new MyMath(); double x = 3.0; double y = calc.square (x); System.out.println (x + " " + y); ...

... the original x is unchanged.Output: 3 9

x here is a copy of the argument. The copy is changed, but...

Page 26: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Passing Objects as Arguments

• Objects are always passed as references: the address is copied, not the object.

Fraction f1 = new Fraction (1, 2); Fraction f2 = new Fraction (5, 17); Fraction f3 = f1.add (f2);public class Fraction{ ... public Fraction add (Fraction f) { Fraction sum; ... }}

f2: addr2

f: addr2

sum:

copy 5/17

f1: addr1

Page 27: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

• A method can change an object passed to it as an argument (because the method gets a reference to the original object).

• A method can change the object for which it was called (this object acts like an implicit argument):

Passing Objects as Arguments (cont’d)

panel.setBackround(Color.green);

Page 28: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

• Inside a method, this refers to the object for which the method was called. this can be passed to other constructors and methods as an argument:

Passing Objects as Arguments(cont’d)

public class ChessGame { ... Player player1 = new Player (this); ...

Page 29: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

return

• A method, unless void, returns a value of the specified type to the calling method.

• The return statement is used to immediately quit the method and return a value:

return expression;

The type of the return value or expression must match the method’s declared return type.

Page 30: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

return (cont’d)

• A method can have several return statements; then all but one of them must be inside an if or else (or in a switch):

public someType myMethod (...){ ... if (...) return <expression1>; else return <expression2>; ... return <expression3>;}

Page 31: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

return (cont’d)

• A boolean method can return true, false, or the result of a boolean expression:

public boolean myMethod (...){ ... if (...) return true; ... return n % 2 == 0;}

Page 32: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

return (cont’d)

• A void method can use a return statement to quit the method early:

public void myMethod (...){ ... if (...) return; ...} No need for a

redundant return at the end

Page 33: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

return (cont’d)• If its return type is a class, the method returns

a reference to an object (or null).

• Often the returned object is created in the method using new. For example:

• The returned object can also come from the arguments or from calls to other methods.

public Fraction inverse () { if (num == 0) return null; return new Fraction (denom, num); }

Page 34: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Encapsulation

• Hiding the implementation details of a class (making all fields and helper methods private) is called encapsulation.

• Encapsulation helps in program maintenance and team development.

• A class encapsulates a small set of well-defined tasks that objects of a class can perform.

Page 35: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

8-35

public vs. private

• Public constructors and methods of a class constitute its interface with classes that use it — its clients.

• All fields are usually declared private — they are hidden from clients.

• Static constants occasionally may be public.

• “Helper” methods that are needed only inside the class are declared private.

Page 36: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

public vs. private (cont’d)

public class MyClass { // Constructors: public MyClass (...) { ... } ... // Public methods: public <sometype> myMethod (...) { ... } ... // Private methods: private <sometype> myMethod (...) { ... } ... // Private fields: private <sometype> myField; ... }

Page 37: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

8-37

public vs. private (cont’d)

• A private field is open not just within the object but to the entire class; any object of the same class can access or even modify it.

public class Fraction{ private int num, denom; ... public multiply (Fraction other) { int newNum = num * other.num; ... }}

Page 38: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Accessors and Modifiers

• A programmer often provides methods, called accessors, that return values of private fields; methods that set values of private fields are called modifiers.

• Accessors’ names often start with get, and modifiers’ names often start with set.

• These are not precise categories: the same method can modify several fields or modify a field and also return its old or new value.

Page 39: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Files and Folders

• javac automatically looks for classes (.java or .class files) in the current folder, or, if classpath is set, in folders listed in the classpath string.

• A missing file may be reported as a syntax error when compiling another file.

• If you set classpath, include the current folder. It is denoted by a dot. For example:

.;C:\javamethods\EasyIO

• IDE helps take care of the file locations.

Page 40: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Libraries

• Java programs are usually not written from scratch.

• There are hundreds of library classes for all occasions.

• Library classes are organized into packages. For example:

java.util — miscellaneous utility classes java.awt — windowing and graphics toolkit javax.swing — newer GUI package Swing

Page 41: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

import

• Full library class names include the package name. For example:

java.awt.Color javax.swing.JButton

• import statements at the top of your program let you refer to library classes by their short names:

import javax.swing.JButton; ... JButton go = new JButton("Click here");

Fully-qualified name

Page 42: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

import (cont’d)

• You can import names for all the classes in a package by using a wildcard .*:

import java.awt.*; import java.awt.event.*; import javax.swing.*;

• java.lang is imported automatically into all classes; defines System, Math, Object, String, and other commonly used classes.

Imports all classes from awt, awt.event, and swing packages

Page 43: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

public class SomeClass{

• Fields

• Constructors

• Methods}private: visible only inside this class

public: visible in other classes

Attributes / variables that define the object’s state. Can hold numbers, characters, strings, other objects. Usually private.

Code for constructing a new object and initializing its fields. Usually public.

Actions that an object can take. Can be public or private.

Page 44: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

public class FallingCube{

private final int cubeSize;private int cubeX, cubeY; // Cube coordinates...private char randomLetter; // Cube letter

public FallingCube(int size){ cubeSize = size; ...}

public void start(){ cubeX = 0; cubeY = -cubeSize; ...}...

}

Fields

Constructor

Methods

The name of a constructor is always the same as the name of the class.

Page 45: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

private (or public) [static] [final] datatype name;

Fields

Usually private

May be present: means the field is shared by all objects in the class

May be present: means the field is a constant

int, double, etc., or an object: String, JButton, FallingCube, Timer

You name it!

Page 46: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Fields (cont’d)

• May have primitive data types:

int, char, double, etc.

private int cubeX, cubeY; // cube coordinates...private char randomLetter; // cube letter

Page 47: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Fields (cont’d)

• May be objects of different types:

private FallingCube cube;private Timer t;private static final String letters;

Page 48: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Constructors

• Constructors are like methods for creating objects of a class.

• Most constructors initialize the object’s fields.

• Constructors may take parameters.

• A class may have several constructors that differ in the number or types of their parameters.

• All of a class’s constructors have the same name as the class.

Page 49: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Constructors (cont’d)

go = new JButton("Go");

Page 50: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Constructors (cont’d)

• Call them using the new operator:

cube = new FallingCube(CUBESIZE);

...

t = new Timer(delay, this)

Calls FallingCube’s constructor with CUBESIZE as the parameter

Calls Timer’s constructor with delay and this (i.e. this object) as the parameters (see Java docs for javax.swing.Timer)

Page 51: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Methods

• Call them for a particular object:

cube.start();

whiteboard.dropCube();

randomLetter = letters.charAt(i);

• But call static (“class”) methods for the whole class, not a specific object:

y = Math.sqrt (x);

Page 52: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Methods (cont’d)

• Constructors and methods can call other public and private methods of the same class.

• Constructors and methods can call only public methods of another class.

Class X

private method

Class Y

public method public method

Page 53: Java – An Object Oriented Language CS 307 Lecture Notes Lecture Weeks 5-6 (part 2) Khalid Siddiqui

Methods (cont’d)

• You can call methods with specific arguments:

g.drawRect (75, 25, 150, 50); g.drawString ("Welcome", 120, 50);

• The number and types of arguments must match the method’s parameters:

public void drawRect ( int x, int y, int width, int height ) {...}

public void drawString ( String msg, int x, int y ) {...}