Download Java PhD01

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Introduction to ObjectOriented Programming
with Java
Spring Semester 2003
Paul Krause
Object-Orientation & Java
Contents
 Getting Started
 A Little Bit of Syntax
 Differences between C and Java
 Object-Oriented Programming in Java
Getting Started
 Goto:
http://java.sun.com
 Download

Its free!
 Download

the Java Development Kit (JDK)
the Documentation
Also free!
 Buy
JAVA In a Nutshell, by David
Flanagan, Publ. O’Rielly

It’ll cost you £19.95, sorry!
File extensions in Java
.java
Source
javac (compiler)
.class
JVM
Any Hardware (that supports the JVM)
Byte code
Java Virtual Machine
What you get in the JDK
appletviewer
javac
java
classes.zip
src.zip
javadoc
javap
…
For running Applets
Compiles .java  .class
Interprets a Java Class
The system provided classes
Complete source for standard
classes
Generates Java HTML documents
Disassembler
Object-Orientation & Java
Contents
 Getting Started
 A Little Bit of Syntax
 Differences between C and Java
 Object-Oriented Programming in Java
Defining a Class
public class Account {
Account
members
{
number
balance
credit_account
debit_account
fields
methods
public int number;
public double balance;
public void credit(double x) {
// do some sums
}
public void debit(double y) {
// do checking then sums
}
}
“Circle” Example
public class Circle {
public static final double PI = 3.14159;
Circle
radius
public double radius;
circumference
area
public double circumference() {
return 2 * PI * radius;
}
public double area() {
return PI * radius * radius;
}
}
The “Circle” class
public class Circle {
// A class field
public static final double PI= 3.14159;
// A useful constant
// A class method: just compute a value based on the arguments
public static double radiansToDegrees(double rads) {
return rads * 180 / PI;
}
// An instance field
public double r;
// The radius of the circle
// Two instance methods: they operate on the instance fields
// of an object
public double area() {
// Compute the area of the circle
return PI * r * r;
}
public double circumference() {
// Compute the circumference
return 2 * PI * r;
}
}
The “main” method
public class Circle {
public double r;
// The radius of the circle
public double area() {
// Compute the area of the
circle
return PI * r * r;
}
public double circumference() {
// Compute the circumference
return 2 * PI * r;
}
public static void main(String[] args) {
int input = Integer.parseInt(args[0]);
Circle c = new Circle();
c.r = input;
double result = c.circumference();
System.out.println(result);
}
}
Put “main” in a new class?
public class MakeCircle {
public static void main(String[] args)
{
int input = Integer.parseInt(args[0]);
Circle c = new Circle();
c.r = input;
double circum = c.circumference();
System.out.println(circum);
double a = c.area();
System.out.println(a);
}
}
An Association
Circle
MakeCircle
creates instances of
main
radius
circumference
area
File extensions in Java
.java
Source
javac (compiler)
.class
JVM
Any Hardware (that supports the JVM)
Byte code
Java Virtual Machine
The Circle example
C:\>cd Java
C:\Java contains
Circle.java and
MakeCircle.java
C:\Java>javac Circle.java
C:\Java>javac MakeCircle.java
C:\Java>java MakeCircle 4
25.13272
50.26544
C:\Java>java MakeCircle 5
31.4159
78.53975
C:\Java now also contains
Circle.class and
MakeCircle.class
Object-Orientation & Java
Contents
 Getting Started
 A Little Bit of Syntax
 Differences between C and Java
 Object-Oriented Programming in Java
Differences
 No


No analogues of #define, #include,
#ifdef
Constants are replaced by static final
fields
 No


Preprocessor
Global Variables
Avoids possibility of namespace collisions
We will see later how you can make a
constant or variable globally accessible
Java vs. C
 Well-defined

Removes this as a platform dependency
 No


primitive type sizes
pointers
Although Java Classes and Arrays are
reference types, these references are
“opaque”. No “address of” or “dereference”
operators
This is not a handicap and eliminates and
important source of bugs
Java vs. C
 Garbage



Objects are “tidied away” as soon as there are
no further references to them
So, no need to explicitly manage memory
Eliminates memory leaks
 No

Collection
goto statement
Adds exception handling and labelled break
and continue statements
Java vs. C
 Variable


Java allows local variable definitions to be
made anywhere in a method or block
Good practice to group them, though
 Forward

declarations anywhere
references
Methods can be invoked before they are
defined (we’ll see why it is important to be
able to do this)
Java vs. C

Method overloading







Multiple methods can be defined with the same name,
so long as they have different parameter lists
No struct and union types
No enumerated types
No bitfields
No typedef
No method pointers
No variable-length argument lists
Object-Orientation & Java
Contents
 Getting Started
 A Little Bit of Syntax
 Differences between C and Java
 Object-Oriented Programming in Java
The Members of a Class

Class fields


public static final double PI = 3.1416;
Class methods
public static double
radiansToDegrees(double rads)
… }


Instance fields


{
public double radius;
Instance methods

public double circumference() {…}
Class Fields
public static final double PI = 3.14159
of type double
 Named PI (capitalise constants)
 Assigned a value of 3.14159
 The static modifier tags this as a Class
Field
 A field

Associated with the class in which it is defined
final modifier means it cannot be
changed
 The
Class Fields…
is only one copy of PI
 Any instance of Class can refer to this
field as PI
 PI is essentially a Global Variable
 There
BUT
 Methods that are not part of Circle
access this as Circle.PI

No name collisions
Class Methods
public static double radiansToDegrees(double
rads) {
return rads * 180 / PI;
}
parameter of type double and
returns a value of type double
 Is essentially a “global method”
 Single
// how many degrees is 2.0 radians?
double d =
Circle.radiansToDegrees(2.0);
Instance Fields
public double radius;
 Each Circle object can have a have a radius
independent of other Circle objects
 Outside a class, a reference to an instance field
must be prepended by a reference to the object
that contains it
Circle c
c.radius
Circle d
d.radius
=
=
=
=
new Circle();
2.0;
new Circle();
c.radius; Are they the same object?
Instance Methods

Instance methods operate on instances of a
Class, and not on the Class itself
 E.g.



area()
circumference()
If an instance method is used from outside the
Class itself, it must be prepended by a reference
to the instance to be operated on:



Circle c = new Circle();
c.radius = 2.0;
double a = c.area();
Creating an Instance
 Every
Class has at least one constructor
 This is used as a default constructor - a
method with the same name as the Class
Circle c = new Circle();
 The new operator creates a new
uninitialised instance of the Class
 The constructor method is then called,
with the new object passed implicitly
Initialising an Instance

A Constructor can use arguments placed
between the parentheses to perform initialisation
 Define a new Constructor for Circle
public Circle(double r) {this.r = r;}

Now two ways:
Circle c = new Circle();
c.r = 0.25;

Or
Circle c = new Circle(0.25);
Multiple Constructors
Public Circle() { r = 1.0; }
Public Circle(double r) {this.r = r;}
 This
is perfectly legal
 Each constructor must have a different
parameter list
 This is a simple example of method
overloading
Destroying Objects
 Java
automatically reclaims the memory
occupied by an object when it is no longer
needed

Garbage Collection
 The
Java interpreter can determine when
an object is no longer referred to by any
other object or variable

Also works for cycles