Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
When you declare your own custom classes you can assign them instance variables. Instance variables in Java are known as fields and they are variables that are assigned at the class level and are available to the entire class and optionally to the rest of the application. I'm working in a version of the application named InstanceVariables that's in this chapter's exercise files. It starts within Olive class that has a public method named crush. Right now it's just outputting a simple string, but I'm going to define a set of instance variables in this class that can be used later on.
To declare an instance variable or a field you place the cursor inside the class definition and within the class definition, you declare each variable with an access modifier, a data type, and a name and optionally, you can set an initial value. So for example, I'll start with public string, meaning I am declaring a variable or a field that can be accessed from anywhere in the application and that will contain a string. I'll give the field a name of name, and I'll set it initially to a value of Kalamata. So that's the type of olive that I'm working with.
I'll let another string variable, this one will be named flavor and it will be a flavor of grassy. According to Wikipedia, Kalamata olives have a grassy flavor. Next, I'll also declare a variable named color. Now rather than setting this as a string, I'll use long integer. Colors can be translated into long integers using the same hexadecimal values that you might use in HTML for cascading style sheets. So I'll call this public, long, color and I'll set it to a value of 0x000000 or Black, and finally, I'll create a variable called oil.
I'll set this as an integer and I'll give it a value of 3. This is random, what I'm saying is that when I crush a Kalamata olive, I'm getting 3 ml of oil, that's almost certainly incorrect in the real world, but it will work for this example. So now these variables or fields are available to the entire application. Eventually, I'm going to hide the actual data within the application, but for now this will work. I'll save my changes and go to the main application where I'm creating an array of olives.
Now I'm going to re-factor or change the structure of the application so that instead of creating an array of Olives that's fixed at runtime I'm going to instead use an array list and this will allow me to resize the array as needed. I'll go into the Main method and add some extra whitespace. I'll create an ArrayList after typing ArrayList, I'll press Ctrl+Space and that will add the required import, and I'll set the array list as containing instances of the Olive class, and I'll name it olives.
There'll be a conflict because I'm already using that name further down, but that's okay, I'll take care of that in a moment. Next, I'll instantiate the array list. Now, I'm going to create three instances of the Olive class. I'll start by declaring a single variable, Olive olive. I'm not instantiating it yet; I'm declaring it once so that I can reuse that reference three times. Next, I'll say olive = new Olive and I'll output the name of the olive that I just created using system.out.println( olive.name) and then I'll add the olive to the array list using olives.add(olive).
I'm done with this array, I'll get rid of it and then I'll copy these three lines of code and paste them in twice. Now I'm obviously making this code more verbose than it really needs to be, but my goal here is to show you that because I declared a public field in the olive class, I can reference it from within the main application. I'll save my changes and run the application and I see some errors. I'll go down to my errors list and double-click and it tells me that the getOil method is expecting an array, but I'm trying to pass in array list. So I'll jump to that method and here's a great little Eclipse shortcut.
Now that my methods are being scattered across multiple classes, I need to be able to move among them more easily. Eclipse lets you click on a method name and jump to the reference and here's the shortcut. Hold down the Ctrl key on Windows or the Command key on Mac, move the cursor over the method, and choose Open Declaration and that will take you to the method itself. Now change the method declaration so that it's receiving an array list of Olives. Save and run the application and you'll see that you're looping through the array list using the same syntax as you did with the array earlier.
You don't need to create an iterator for this; if all you need to do is look through, you can simply use it for each command. So as I create the Kalamata olives, I am outputting the names of the olives and as I crush them, I'm still getting ouch. Now let's go ahead and fix that. We need to be more specific. I'll go to the Olive class and I'm going to change how the crush method behaves. I'm going to change it to return the amount of oil that just got crushed. I'll change the data type from void to int and I'll add return oil.
I'll save the changes there and go to OlivePress. Within the OlivePress class and within its getOil method, I'll declare an integer variable named oil and I'll set it a value of 0. Within the for loop, I'll increment the amount of oil that I've received using oil += Olive.crush. I'll jump to the crush method. Remember that I'm returning the total amount of oil which is this integer value. I'll come back to the OlivePress and after the for loop, I'll output the amount of oil that I just received.
The string will be, You got, and then the amount of oil and then units of oil. I'll save and run the application and it tells me, I got 9 units of oil three times three. Finally I'll go back to Olive. You might have noticed that at no point was I actually accessing the oil field from the main application. So I don't need to make this field public and this is the first time I'm going to talk about hiding data within a Java application. In a Java application, you should only make data accessible that must be accessible to the rest of the application.
If you can hide the data within a class, you should do it. So the only method that's actually accessing this value at this point is a method within the class and I can make this field private. I'll save and run the application again and it still works. So that's a look at how to declare instance variables or fields in a Java class. These are persistent data values. When you create the instance of the class, the object, these data values will persist as long as the object persists in memory. I've shown you how to make those variables either public or private.
If you make them public, if you need to be able to access those values from the rest of the application or private, if they're only used within the class, and there is also the access modifier protected, but we won't need that until we start dealing with inheritance.
Get unlimited access to all courses for just $25/month.Become a member
61 Video lessons · 96634 Viewers
56 Video lessons · 110349 Viewers
71 Video lessons · 79180 Viewers
131 Video lessons · 37964 Viewers
Access exercise files from a button right under the course name.
Search within course videos and transcripts, and jump right to the results.
Remove icons showing you already watched videos if you want to start over.
Make the video wide, narrow, full-screen, or pop the player out of the page into its own window.
Click on text in the transcript to jump to that spot in the video. As the video plays, the relevant spot in the transcript will be highlighted.