"Introduction to HTML and CSS (2016)" was retired on July 31, 2024. You are now viewing the recommended replacement.
Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Well done!
You have completed Java Objects!
You have completed Java Objects!
Preview
You can protect your variables from re-assignment using the final keyword
Learn more
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
Okay, so over the past few lessons,
0:00
we have successfully picked up
some language constructs to
0:02
explain that a character name is
required to create a new Pez dispenser.
0:06
And after it's been created,
you currently can't change that character,
0:10
which was exactly what we
were intending to convey.
0:14
Because we're modeling
what happens in real life.
0:17
Getting so
close like we just talked about though.
0:20
What if someone on our team doesn't
know that these heads can't be changed.
0:23
And they come in and write a new method
that does just that, it changes the head.
0:28
No, we'd hopefully,
catch that in a review of their code, but
0:32
we can do better than that.
0:35
Let's simulate the scenario and
0:37
I'll introduce a concept that
will help solve the problem.
0:39
So let's go ahead and
assume that a developer on our team,
0:42
let's call him Chris.
0:45
He grabbed our Pez dispenser class and
decided to make a new method
0:47
that would change the character head and
return the previous one.
0:50
So let's walk through that
method creation really quick.
0:54
Let's see, obviously,
Chris made that public, right?
0:57
He wanted somebody to use
it because it's useful.
1:00
And like we said, it's gonna return the
original character as the return value.
1:02
So that's a string, and
then we'll name it.
1:06
Let's call it swapHead cuz
it's gonna swap the heads up.
1:09
And it's callable so,
we're gonna open parenthesis.
1:13
And it will declare a parameter of type
string that represents a character name,
1:15
right?
1:21
So we're gonna ask that somebody
passes in the new character name.
1:22
And then we're gonna open up the method
body, and I'm gonna close it right away.
1:25
Uh-oh, we've got that naming
collision problem again, right?
1:29
So look, here's a character name.
1:32
And we wanna swap out the character name,
so
1:33
we know how to deal with that though,
right?
1:35
So first, what we wanna do is get
a hold of the original character name,
1:37
so that we can store it in a variable.
1:41
So let's be clear about it.
1:43
Let's say, string originalCharacterName.
1:45
And we want to make sure that
we keep this character name.
1:51
So we're gonna say, this.charactername,
not running into that naming collision.
1:55
We're not gonna fall for it, right?
1:59
Cuz this is in scope.
2:01
And now, what we'll do is we'll swap out
this characterName with the characterName.
2:03
So basically, all we're doing
is just keeping a safe copy
2:10
of what was originally in there because
that's what we wanna return, right?
2:14
So we're gonna return the original,
2:17
[LAUGH] I keep on typing
the originalCharacterName.
2:20
So now, if we walked over to this method,
but we didn't want Krista, right?
2:27
We can show you how it's used.
2:34
So we're gonna say,
2:36
before = dispenser.swapHead.
2:39
And we're gonna put in bring back
the Darth Lord again, Darth Vader.
2:44
And we're gonna print
2:50
out ("It was %s but
2:55
Chris switched it to %s.
3:00
And then we'll do a new one.
3:07
And so we want to first,
let's first %s as before, right?
3:10
So before,
it was what came out of the dispenser.
3:15
And then next, we're gonna say, dispenser.
3:18
And we're gonna call our own
method getCharacterName, cool.
3:20
And we end that line.
3:25
All right, so I'm gonna save it.
3:27
And then I am going to say,
3:30
clear && javac Example.java
&& java Example.
3:32
What do you think, is it gonna work?
3:38
I think so, I think you did it.
3:40
Yep, so there it is.
3:44
It was yield up at Chris
switched to Darth Vader.
3:45
Chris did exactly what we
didn't want him to do.
3:47
He changed the head.
3:49
Come on, Chris.
3:51
But we can't really buy him, can we?
3:52
We didn't make it very clear.
3:54
We could have at least left a comment so
he knew.
3:57
Then actually, there's something
way better than a comment.
3:59
Something that would stop Chris and
his tracks, even better.
4:02
It wouldn't even let him compile and
that's the final keyword.
4:05
So when you want a variable to
be assigned once and only once,
4:09
you market with the final key word, final.
4:14
So now, if we go and we try to run this
code, we'll see that Chris got blocked.
4:20
You cannot assign a value to
the final variable characterName, and
4:25
that is happening from inside line 14,
right?
4:30
So the PezDispenser line 14 if
we come in here to line 14.
4:33
Sorry, in the PezDispenser
class [INAUDIBLE] line 14,
4:38
that's in the swapHead, okay?
4:41
Cuz we assigned it once here.
4:43
And he's trying to swap it here,
it's telling that.
4:45
In a more advanced editor which
we get to hear in a few courses.
4:48
This would have warned him very loudly
before he even tried to compile.
4:51
So again, final here, says that this
variable characterName is declared,
4:54
it can only be initialized once,
it doesn't allow for any more assignments.
5:00
Now, you can use the final keyword for
more than just field.
5:07
You can use methods in even classes.
5:09
Check the teacher's notes for more.
5:11
I'm gonna go ahead and say, sorry Chris,
you can't do this, you're out of here.
5:13
Let's give her this.
5:17
And I'm gonna get rid of this line over
here, because now, we have protected it.
5:18
And that code makes no sense, awesome.
5:24
This video is the final one in this stage.
5:27
And I know, I know,
you're probably like, finally!
5:30
You're doing great.
5:33
And don't worry, I've been
intentionally taking things slow and
5:34
making sure that you can read the intent
of Java code when you come across it.
5:37
Also, now, you can write it.
5:41
Now, that we got the basics in place.
5:42
We've got fields,
access modifiers, methods, and
5:45
constructors, let's
pick up the pace a bit.
5:47
I think it's finally time for
5:50
us to start working through the core
features of this Pez dispenser.
5:51
I know our little dispenser object
isn't very impressive at the moment.
5:54
Let's do something to change that.
5:58
Let's wrap up this stage so that we can
get some Pez in and out of this thing.
6:00
But first, let's do a quick practice
review of what we just learned.
6:04
You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up