Question of the Day

Post on 22-Feb-2016

31 views 0 download

Tags:

description

Question of the Day. How do you add 5 matches to these 6 & make 9?. Question of the Day. How do you add 5 matches to these 6 & make 9?. Lecture 6: Static vs. Non-Static Members. Announcements. Weekly assignments problems due tomorrow - PowerPoint PPT Presentation

Transcript of Question of the Day

Question of the Day

How do you add 5 matches to these 6 & make 9?

Question of the Day

How do you add 5 matches to these 6 & make 9?

LECTURE 6:STATIC VS. NON-STATIC MEMBERS

Announcements

Weekly assignments problems due tomorrow Helps get rid of rust; last week of reviewing

material Make sure that your coding skills are back

up to speed Next week JUnit tests provided for each

problem

Calling Methods

Some methods really need an object Integer.intValue() is unclear without an

object But other methods independent of an

instance main(String[]) lacks object to use to call it Why require Integer to call parseInt(String)?

static Methods

static methods do not need an instance Behavior defined by class, not an instance parseInt(String) based only on Integer

All methods similar in how written & executed May or may not include parameters Local variables can be declared and used Must either be void or declare return type Mix of methods possible for all classes &

enums

Making Method static

Include static keyword in method declarationpublic static void main(String args[])public static int parseInt(String s)private static int nextInt()

Behaves like any other method (almost)

Use locals & parameters like normal As with other code, call (nearly all) other

methods Java operators can be used Perform any I/O operations

static v. Non-static

Methods that are non-static have this Aliased to instance on which method called Can directly use fields & call all methods

No this parameter in static methods Code directly using non-static members

illegal… … using static fields & methods perfectly

legal As always, can use object to access its

members

BadDuck

public class BadDuck {private int quackVolume;

public static void printVolume() { System.out.println(“Volume is ” + getVolume()); BadDuck duck = new BadDuck(); duck.quackVolume = 11; System.out.println(“Volume is ”+duck.getVolume());}

public int getVolume() { return quackVolume;}

}

BadDuck

public class BadDuck {private int quackVolume;

public static void printVolume() { System.out.println(“Volume is ” + getVolume()); BadDuck duck = new BadDuck(); duck.quackVolume = 11; System.out.println(“Volume is ”+duck.getVolume());}

public int getVolume() { return quackVolume;}

}

Compiler error. Without an object, whose volume are we

getting?

BadDuck

public class BadDuck {private int quackVolume;

public static void printVolume() { System.out.println(“Volume is ” + getVolume()); BadDuck duck = new BadDuck(); duck.quackVolume = 11; System.out.println(“Volume is ”+duck.getVolume());}

public int getVolume() { return quackVolume;}

}

This is good. There is a duck to get the volume.

BadDuck

public class BadDuck {public static String duckSpeak() { return “quack”;}

}

public class UseDuck {public void speak() { System.out.println(BadDuck.duckSpeak()); BadDuck duck = new BadDuck(); System.out.println(duck.duckSpeak());}

}

BadDuck

public class BadDuck {public static String duckSpeak() { return “quack”;}

}

public class UseDuck {public void speak() { System.out.println(BadDuck.duckSpeak()); BadDuck duck = new BadDuck(); System.out.println(duck.duckSpeak());}

}

This compiles. Static methods do not use an

object, so this is preferred way to call them.

BadDuck

public class BadDuck {public static String duckSpeak() { return “quack”;}

}

public class UseDuck {public void speak() { System.out.println(BadDuck.duckSpeak()); BadDuck duck = new BadDuck(); System.out.println(duck.duckSpeak());}

}Also fine, but since method is static, still cannot access

instance.

static Fields

Some data belongs to class, not instanceFloat.MAX_VALUECitizen.nationalPopulationInstructor.bestProfessor

static fields used for any class-based data All of the class instances see same value Do not need an instance to access this

value Can be updated via any instance or via

class

static Code for Tracing

public class HHL {static int numTeams;String name;

HHL(String newName) { numTeams += 1; name = newName;}

public static void main(String[] args) { HHL me = new HHL(“MHz”); HHL you = new HHL(“SFH”); HHL alias = you; alias.name = “Bob”; alias.numTeams = 10;}

}

Instance v. Class Review

Class owns members declared as static Accessing & using member possible without

instance Methods lack implicit this parameter no

matter what To use a non-static member, instance

required Fields’ data instance-specific and not shared

by class Can access all members using implicit this

parameter Other instances’ members accessible with

reference

Your Turn

Get into your groups and complete activity

For Next Lecture

Reading about packages & visibility for Wed. What are packages and what do they do? What are the different visibility modifiers in

Java? What is javadoc and why is it so amazingly

useful?

There is weekly assignment posted on Angel Assignment due tomorrow; working week-

to-week While not due daily, problems still follow

lectures