1 programming section 3 2 importing classes purpose packages classpath creating and using a package

34
1 Programming section 3

Post on 21-Dec-2015

225 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

1

Programming section 3

Page 2: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

2

Importing classes

purposepackagesCLASSPATHcreating and using a package

Page 3: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

3

Importing classes

Purpose

Serious Java programming deals with many classes … … and so some sort of organisation is needed. Organisation in Java is achieved using the concept of a package (c.f. the use of folders or directories to

organise files).

A program can import classes from a package

Page 4: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

4

Importing classes

Packages

Packages are collections of classes and sub-packages. (c.f. directories can hold files and subdirectories)The standard package or collection of classes used in Java is called java.lang

Page 5: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

5

Importing classes

Standard classes

Standard classes in java.lang can be used directly e.g. System.out.println(“Hello world”);out is a member variable

(attribute) of the System class. It is of class PrintStream

println is a method of the PrintStream class

Page 6: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

6

Importing classes

A number of package classes

If a number of classes required are in some other package then import all the public classes in the package.e.g.

import java.awt.*;

:

Font f = new Font();

Page 7: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

7

Importing classes

Name clashes

This fails if FTP is in both packagesimport com.naviseek.web.*;import com.prefect.http.*;

:FTP out = new FTP();

This succeeds since ambiguity removed:com.prefect.http.FTP out = new com.prefect.http.FTP();

Page 8: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

8

Protecting methods and attributes

Basic Java Language Section

Page 9: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

9

Protecting Your Class

Usually you don’t want other objects directly changing your attributes because if you modify the type of name of the attributes you have to modify the other classes…So you can protect any method or attribute from outside interference.. by providing a setter to change its valueYou can also protect parts of your class using private and protected in their declaration

Page 10: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

10

Problems with Accessing attributes directly

class Hero{int bullets=10;}

Hero h=new Hero();h.bullets=-20;

This is a silly value for the number of bullets but

because the variable is accessed directly no error

checking can be performed by the hero class

Page 11: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

11

Using setters to change attributes

class hero{ int bullets=0;void set_Bullets(int b){

bullets=b;}}

Hero h=new Hero();h.set_Bullets(-20);

before we change the bullets attribute we

could add error checking to detect bad

values for b

Page 12: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

12

Protecting Your Class

Private – this means the method or attribute is not available outside the class it is defined in not even subclasses can access itProtected – only subclasses and classes in the same package can access itPublic - anyone can access itAny class can always access the attributes and methods it defines

Page 13: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

13

Protection

class Hero{protected int bullets;public set_Bullets(int b)

{bullets = b}

private boolean spy;}

now bullets cannot be accessed from outside the class

from another package directly...

... so the setter must be used to modify

bullets and can provide error

checking

Page 14: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

14

Example of protectionpackage examples;class Example1

{void doit(){Hero john = new Hero();john.set_bullets(10); // legal because set_Bullets is publicjohn.bullets=20; // illegal because height is protectedjohn.spy=true; // illegal because spy is private}}

Page 15: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

15

Protection with inheritancepackage examples;class Hero2 extends Hero

{void doit()

{set_bullets(10); // legal because grow is

publicbullets=20; // legal because height is

protected and we are a subclass of Personspy=true; // illegal because spy is private}

}

Page 16: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

16

Arrays

Mass Storage

Page 17: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

17

ArraysArrays allow large numbers of simple data types such as int or instances of classes to be easily accessed.

int array[]=new int[10];

array[0]=4;

array[9]=1234;

System.out.println(array[0]);

indicates that the array will hold 10 items

accessing an element of an array also uses [] arrays start at 0

this is the last element of the array

indicates variable is an array

Page 18: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

18

Arrays holding Objects

Arrays can also hold instances of a class or any of its subclass

Monster array[]=new Monster[10];

array[0]=new Monster();

array[9]=new Dragon();

array[0].take_damage();

indicates that the array will hold 10 instances of the Monster class or

subclass

Dragon is a subclass of Monster so this is fine

array[0] is an instance of Monster so we can call take_damage on it

Page 19: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

19

Dangers of Arrays of Objects

with an array of simple types such as ints every element in the array exists even if we don’t assign a value to them

int array[]=new int[2];System.out.println(array[0]);

with an array of Objects elements are null until we assign an instance to them

Monster array[]=new Monster[2];array[0].take_damage();

null pointer exception!

no problem!!

Page 20: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

20

Initialising Object Arrays

unlike arrays of simple types arrays of any type of object require each element to be instantiated and inserted into the array...

Monster array[]=new Monster[2];array[0]=new Monster();array[1]=new Monster();array[0].take_damage();

Page 21: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

21

Finding the number of elements in an array

Fortunately we can ask the array how long it is using .length

int array[]=new int[10];int index;for (index=0;index<array.length;index=index+1)

{array[index]=0;}

Now we can make the array bigger or smaller and the code will not crash and will initialise the entire array

Page 22: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

22

Problems with Arrays I

The single biggest problem with an array is that it is not variable length. You have to declare the length of the array as a constant and you can not tag on extra elements

int array[]=new array[20];array[30]=1234;

array out of bounds exception!

Page 23: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

23

Problems with arrays II

You also can not remove elements in an array even if they are no longer needed. For instance suppose I have an array of 4 Monsters which the Hero is fighting. If the Hero kills 2 it would be nice to remove two from the array... the only thing you can do is to replace the dead instance with null.

Page 24: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

24

Strings

Mass Storage

Page 25: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

25

Strings

The String class allows you to store and manipulate sequences of charactersLike chars, Strings are case sensitive so “hello” is not the same as “Hello”Strings are in fact ObjectsThe length method tells you the length of a string in chars e.g. “hello”.length()==5You can get a copy of the character at any position in a string using charAt() “hello”.charAt(0)==‘h’ “hello”.charAt(4)==‘o’

Page 26: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

26

Relationship between String and Arrays

It is possible to get a copy of the contents of a String as a char arrayString s="hello world";

char con[]=new char[s.length()];

s.getChars(0,s.length(),con,0);

make sure the array is large enough to store the entire

String

Starting char in the String

ending char +1 in the String

array to copy chars intostarting position in the

array

Page 27: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

27

Relationship between String and Arrays

It is also possible to create a string from a char array

String s="hello world";char con[]=new char[s.length()];s.getChars(0,s.length(),con,0);con[0]='H';s=new String(con);System.out.println(s);

However, manipulating char arrays is not easy so in general it is better to manipulate the String by keeping it in its String format

Page 28: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

28

Manipulating Strings

There are many manipulation functions defined for the string object one of the most useful is subStringYou can get a copy of part of a string using subString

“hello”.subString(0,2)==“hel”

“hello”.substring(2,3)==“ll”

starting indexending index

Page 29: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

29

Adding to your String

Unlike arrays, Strings can be appended and pre-pended to easily

String s=“world”;s=“hello “+s;s=s+”!”;

This gives the String “hello world!”

Page 30: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

30

Seeing if Two Strings are Equal using ==

For simple types you can use == and != to see if something is equal or not equal.== and != do not work correctly for objects

String s=“hello there”;String s1=“hello there”;s==s is trues1==s1 is trues==s1 is false!!!!!!!!!!!!!!

This is because for objects == and != check where the instance is in memory and not the contents of the instances

Page 31: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

31

Seeing if Two Strings are Equal using equals

To see if two Strings are identical you need to use equals() or equalsIgnoreCase()

String s=“hello there”;String s1=“hello there”;s.equals(s) is trues.equals(s1) is trues.equals(s1) is true

This is because equals and equalsIgnoreCase check the contents of the instances and not their locations in memory

Page 32: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

32

Converting other types into Strings

Java will convert almost any simple type into a String for you

String s=“”;int i=166;s=“”+i;

This does not work for Objects because Java can not work out how to convert an object into a String

“” converts a copy of i into a String

“” is an empty String

Page 33: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

33

Converting Strings into other types.

Java provides static methods in classes called Integer, Long, Float and Double to help you:

int i=Integer.parseInt("100");long l=Long.parseLong("100");float f=Float.parseFloat("100");double d=Double.parseDouble("100");

If and only if the entire String looks like another type can the conversion take place.

int i=Integer.parseInt(“hello 100"); Exception

Page 34: 1 Programming section 3 2 Importing classes purpose packages CLASSPATH creating and using a package

34

More String Functions

There are many more String manipulation functions than we have time for to look at hereTake a look at the Java documentation for the String class and have some fun!