Anda di halaman 1dari 42

Java Methods & Classes

Primitive Data Types


Data type byte short int long float -128 .. 127 (8 bits) -32,768 .. 32,767 (16 bits) -2,147,483,648 .. 2,147,483,647 (32 bits) -9,223,372,036,854,775,808 .. ... (64 bits) +/-10-38 to +/-10+38 and 0, about 6 digits precision Range of values

double
char boolean

+/-10-308 to +/-10+308 and 0, about 15 digits precision


Unicode characters (generally 16 bits per char) True or false

Classes ARE Object Definitions


OOP - object oriented programming code built from objects Java these are called classes Each class definition is coded in a separate .java file Name of the object must match the class/object name

Built in Classes

Java has a large built in library of classes with lots of useful methods Ones you should become familiar with quickly String Math Integer, Character, Double

System Arrays Scanner File Object Random Look at the Java API page

The three principles of OOP

Encapsulation
Objects hide their functions (methods) and data (instance variables)

Inheritance
Each subclass inherits all variables of its manual superclass

car

Super class
automatic

Subclasses

Polymorphism
Interface same despite draw() different data types

draw()

Classes and Objects


A Java program consists of one or more classes A class is an abstract description of objects Here is an example class:

class Dog { ...description of a dog goes here... }

Here are some objects of that class:

More Objects

Here is another example of a class:


class Window { ... }

Here are some examples of Windows:

Classes contain data definitions

Classes describe the data held by each of its objects Data usually goes first in a class Example:
class Dog { String name; int age; ...rest of the class... } A class may describe any number of objects
Examples: "Fido", 3; "Rover", 5; "Spot", 3;

A class may describe a single object, or even no objects at all

Classes contain methods


A class may contain methods that describe the behavior of objects Methods usually go after the data Example:
class Dog { ... void bark() { System.out.println("Woof!"); } }

When we ask a particular Dog to bark, it says Woof! Only Dog objects can bark; the class Dog cannot bark

Methods contain statements

A statement causes the object to do something


(A better word would be commandbut it isnt)

Example:
System.out.println("Woof!"); This causes the particular Dog to print (actually, display on the screen) the characters Woof!

Methods may contain temporary data

Data described in a class exists in all objects of that class


Example: Every Dog has its own name and age

A method may contain local temporary data that exists only until the method finishes Example:

void wakeTheNeighbors( ) { int i = 50; // i is a temporary variable while (i > 0) { bark( ); i = i 1; } }

Classes always contain constructors


A constructor is a piece of code that constructs, or creates, a new object of that class If you dont write a constructor, Java defines one for you (behind the scenes) You can write your own constructors Example: (This part is the constructor) class Dog {
String name; int age; Dog(String n, int age) { name = n; this.age = age; } }

Variable Scope

Variables may be declared in: Class state variables Method/constructor local variables (and parameters) Inner block of a method also local variables A variable is recognized throughout the block in which it was defined. This is called the scope of the variable. Local variables are allocated when the method is entered and freed when the method exits. The same name may be used in different scopes, and refer to totally different things If the same name is used in an outer and inner scope, then the inner scope definition hides the outer one.

The this reference

When appearing inside an instance method, the this keyword denotes a reference to the object that the method is acting upon. The following are equivalent:
public int getHours() { return hours; } public int getHours() { return this.hours; }

Visibility Modifiers

We accomplish encapsulation through the appropriate use of visibility modifiers Visibility modifiers specify which parts of the program may see and use any particular class/method/field Information hiding is good! A modifier is a Java reserved word that specifies particular characteristics of a programming construct We've used the modifier final to define a constant Java has three visibility modifiers: public, private, and protected We will discuss the protected modifier later in the course

Public/private

Methods/data may be declared public or private meaning they may or may not be accessed by code in other classes Good practice:
keep data private keep most methods private

well-defined interface between classes helps to eliminate errors

Situation Accessible to class from same package?

public yes

protected yes

default yes

private no

Accessible to class from different package?

yes

no, unless it is a subclass

no

no

Using objects

Here, code in one class creates an instance of another class and does something with it
Fruit plum=new Fruit(); int cals; cals = plum.total_calories();

Dot operator allows you to access (public) data/methods inside Fruit class

API Documentation

Your classes are often intended to be used by other programmers Programmers that use your class are not interested in the way it is implemented. They want to use it as a whole and are only interested in what it does and how to use it. API (Application Programmer Interface) documentation is a description of the interface of the class intended for the application programmer who wants to use it. To use the class, we need not (and should not) look at the code. All that is needed is the class API.

API Documentation

The JDK contains a special tool for the generation of API documentation for your classes, called javadoc. Any documentation which is part of the interface begins with /** (double asterick) and ends with */ javadoc takes as input Java programs and automatically generates documentation using: the public/protected method signatures the documentation comments (enclosed by /** */). The output is an HTML file which can be viewed by an internet browser.

Clock API Documentation


/** * A clock represents a point of time in a 12 * hour period within a precision of seconds. * Its range: 1:00:00 -- 12:59:59. */ public class Clock { private int hours; private int minutes; private int seconds; /** * Constructs a Clock: Sets the clock to the * specified time. */ public Clock(int hours, int minutes, int seconds){ // }

Clock API Documentation /** cont. a Clock: Sets the clock to 12:00:00 * Constructs
*/ public Clock(){ this(12,0,0); }

/** * Advances this clock by 1 second. */ public void secondElapsed() { // }


//

Javadoc Process
.java file

javadoc

.html file

View using a

browser

Clock javadoc - page 1

Clock javadoc - page 2

What should you comment?

You should put a documentation comment for the class itself and for any member of the class which is part of its interface. All public constructors and methods should have documentation comments. Private methods are not part of the interface of the class, thus javadoc skips them. (But you should still comment them for internal purposes.) In the rare cases that there are public fields, they should have documentation comments.

API Documentation

Remember that documentation comments are written for programmers who use your class as a whole. They should describe only What the class does, How to use it. Documentation comments should not describe how a class is implemented. Documentation comments should be Short and descriptive, Written in a simple language (ENGLISH), Accurate. Assume that the reader doesnt know anything about your class

API Documentation Tags

Documentation comments can also include tagged paragraphs that give a standard way to document several features of the interface such as method parameters, return values, etc. A tagged paragraph begins with the symbol @ followed with a tag keywords. Tags: @see, @author, @version, @param, @return, @exception.

Documentation comments text can include HTML tags.

@param tag
/** * Changes the current time to hour:minute:second * @param hours The new hour value. * @param minutes The new minutes value. * @param seconds The new seconds value. */ public void setTime(int hours, int minutes, int seconds) { this.hours = hours; this.minutes = minutes; this.seconds = seconds; }

setTime generated javadoc

@return
/** * Returns the current hour * @return The current hour (between 1 and 12). */ public void getHour() {
return hours; }

getHour javadoc

Java Development Kit tools


javac - The Java Compiler java - The Java Interpreter jdb The Java Debugger appletviewer -Tool to run the applets

javap - to print the Java bytecodes javaprof - Java profiler javadoc - documentation generator javah - creates C header files

Stream Manipulation

Streams and I/O

basic classes for file IO


FileInputStream, for reading from a file FileOutputStream, for writing to a file

Example:

Open a file "myfile.txt" for reading FileInputStream fis = new FileInputStream("myfile.txt"); Open a file "outfile.txt" for writing FileOutputStream fos = new FileOutputStream ("myfile.txt");

35

Display File Contents


import java.io.*; public class FileToOut1 { public static void main(String args[]) { try { FileInputStream infile = new FileInputStream("testfile.txt"); byte buffer[] = new byte[50]; int nBytesRead; do { nBytesRead = infile.read(buffer); System.out.write(buffer, 0, nBytesRead); } while (nBytesRead == buffer.length); } catch (FileNotFoundException e) { System.err.println("File not found"); } catch (IOException e) { System.err.println("Read failed"); } } }

36

Filters
Once a stream (e.g., file) has been opened, we can attach filters Filters make reading/writing more efficient Most popular filters: For basic types: DataInputStream, DataOutputStream For objects: ObjectInputStream, ObjectOutputStream

37

Writing data to a file using Filters


import java.io.*; public class GenerateData { public static void main(String args[]) { try { FileOutputStream fos = new FileOutputStream("stuff.dat"); DataOutputStream dos = new DataOutputStream(fos); dos.writeInt(2); dos.writeDouble(2.7182818284590451); dos.writeDouble(3.1415926535); dos.close(); fos.close(); } catch (FileNotFoundException e) { System.err.println("File not found"); } catch (IOException e) { System.err.println("Read or write failed"); } } }

38

Reading data from a file using filters


import java.io.*; public class ReadData { public static void main(String args[]) { try { FileInputStream fis = new FileInputStream("stuff.dat"); DataInputStream dis = new DataInputStream(fis); int n = dis.readInt(); System.out.println(n); for( int i = 0; i < n; i++ ) { System.out.println(dis.readDouble()); } dis.close(); fis.close(); } catch (FileNotFoundException e) { System.err.println("File not found"); } catch (IOException e) { System.err.println("Read or write failed"); } } 39 }

Object serialization
Write objects to a file, instead of writing primitive types.
Use the ObjectInputStream, ObjectOutputStream classes, the same way that filters are used.

40

Write an object to a file


import java.io.*; import java.util.*; public class WriteDate { public WriteDate () { Date d = new Date(); try { FileOutputStream f = new FileOutputStream("date.ser"); ObjectOutputStream s = new ObjectOutputStream (f); s.writeObject (d); s.close (); } catch (IOException e) { e.printStackTrace(); }
public static void main (String args[]) { new WriteDate (); } }
41

Read an object from a file


import java.util.*; public class ReadDate { public ReadDate () { Date d = null; ObjectInputStream s = null; try { FileInputStream f = new FileInputStream ("date.ser"); s = new ObjectInputStream (f); } catch (IOException e) { e.printStackTrace(); } try { d = (Date)s.readObject (); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InvalidClassException e) { e.printStackTrace(); } catch (StreamCorruptedException e) { e.printStackTrace(); } catch (OptionalDataException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println ("Date serialized at: "+ d); } public static void main (String args[]) { new ReadDate (); } }

42