As we continue, we begin by describing a new design keyword: static
.
We’ll also introduce introduce one new piece of object syntax.
But first, let’s warm up with another debugging challenge!
this
this
this
is a keyword in Java that you can use in your instance methods.
It always refers to the current instance that is executing the method.
So this:
is equivalent to this:
The example above is one use of this
.
However, we’ll usually just go the first route, and choose parameter names that don’t conflict with our instance variable names.
This helps avoid mistakes.
checkstyle
will help you with this, complaining (as it does above) that your parameter “hides a field”.
However, there is one place where we will use this
.
Let’s go through it together:
static
Methodsstatic
MethodsThe object methods we have been writing so far are known as instance methods:
Even though they share the same implementation, you can think of each Person
as having its own getName
method
that can access its instance variables, in this case name
.
However, Java also allows us to create methods that are attached to the class, not to the instance.
To do that, we use a new keyword: static
.
Let’s see how that works:
static
v. Instancestatic
v. Instancestatic
class methods cannot access instance variables.
Let’s look at why, and the differences between class and instance methods:
static
class methods are not uncommon.
Particularly when you have methods that don’t need an instance to function properly.
Let’s look at one example of a class that consists almost entirely of static
methods,
Math
:
Create a class named Math
. Math
should have one public static
method named add
. add
should accept two
int
arguments and return their sum.
static
Fieldsstatic
FieldsYou can also use the static
keyword on fields.
One common use for this is to establish constants to make our code more readable and less error-prone.
To do this, we combine static
with a keyword that we haven’t seen before, final
.
final
creates a variable that cannot be changed after it has been set.
We can combine static
and final
to create a symbolic constant.
Let’s look at how:
static
Fieldsstatic
FieldsCan you create modifiable—that is, non-final
—static
fields?
Yes.
However.
This is extremely rare, and very easy to get wrong.
We won’t test you on it, but view this walkthrough to see how this works:
Define a public class named Toggler
with a single public instance method named toggle
that takes no parameters
and returns a boolean
.
Toggler
should also provide a single public constructor that accepts a boolean
argument and sets the initial
state of
the Toggler
instance.
Toggler
maintains one piece of private state: the boolean
.
Calling toggle
changes the boolean
from true
to false
or false
to true
and returns the new (not the
old) state of the boolean
.
So, for example:
Note that the internal state should be private.
Need more practice? Head over to the practice page.