Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
When you declare a method in a Java application, you can declare it either as a class method or an instance method. A class method is a method like the ones I've been using so far, it's called from the definition of the class. An instance method in contrast is called from an instance of the class or an object. Typically, you can use class methods when you're building up a library, say, of utility functions and you are going to pass in all the values that the method is going to operate on as arguments passed into the method when it's called. But when you start working with more complex objects, objects that have persistent data in them, you are going to want to learn how to use instance methods.
For this exercise, I'm working a project named InstanceMethods that has three classes. All three classes are starting off pretty empty. The Main class has a main method that doesn't do anything yet and there's an OlivePress class and an Olive class, and again, they don't have any functionality yet. I'm going to design this Olive class so that it can be instantiated and then its methods can be called. I'll place the cursor inside the class declaration. To define in the instance method, you use the same sort of signature as you do with a class method, but you don't put in the static keyword.
Remember, the Main method has this word, static, and all of the methods that I've defined throughout this course up to this point have also used the word static. The word static means this is a class method that can be called from the class definition. If you drop out the word, static, it's an instance method. Just as with class method you start with an access modifier; public if you want to method to be called from anywhere in the application; private if it's only available within the class; and protected if it's available within this class or any of its subclasses. I'll declare this method as public.
Next you need a return type. Initially, this method will return void or nothing and then the method name which I'll call crush. Add in the parentheses at the end of the method name and a pair of braces and now you can add code to implement the method. When an Olive is crushed, we'll say it hurts, so the Olive says ouch. So I'll output using system.out.println the word ouch and I'll save my changes and that's my first instance method. Now I'll go back to the main application.
Within the main application, in order to call that method, I need to create an instance of the Olive class. So I'll declare a variable. I'll assign a data type of Olive, the name of the class. Notice that as I type the name of the class, I get the little squiggly line underneath the class name and that tells me that the class currently is being seen as undefined. The compiler doesn't know where it is. So I'll press Ctrl+Space, I'll see a listing of all the classes that start with the word Olive and I'll choose Olive. An Eclipse adds a required import statement at the top of the code.
Even though this is my own class and my own application, the rules for imports are the same as with the Java class library. If the class that I'm using is in a package other than the one that contains the current class, I must import it. Next, I'll declare the variable name which I'll set as olive, all lowercase, and I'll instantiate using new Olive. Now you may be thinking where is that method. If I go back to Olive.java notice that there is no definition of a constructor method or any other method that matches the class name.
The answer is that the Java compiler always adds a no arguments constructor method, a method that can be used to create an instance of the class. If you don't define one, one is defined for you and that's what I'm calling here. So I have created an instance of the Olive class and now I'll call its method using olive., and when I type the dot, Eclipse shows me the list of methods that are available. The crush method is at the top of the list. All of the other methods that you see here are defined as a part of the class object. I'll talk later in the course about inheritance, but basically all these methods are coming from a class name object.
That is the super class of other classes in Java. I'll call the crush method, I'll save my changes and run the application and there is the output. I call the objects instance method and it was responsible for outputting that string to the console. Now I'll create one more instance method. So far my application knows how to crush a single olive, but clearly that's not enough to get enough olive oil. So now, I'm going to create an OlivePress class and once again, just like the olive, it will be designed to be instantiated.
I'll go to OlivePress.java and I'll create a public method named getOil. Once again, it will return void. The getOil method will receive an array of olive objects and it will loop through the olives and crush them one at a time. So I'll go to my method getOil and I'll design it to receive an array of olives. I'll type in the word, olive, I'll press Ctrl+Space and choose olive, that will add the required import statement. I'll add the opening and closing brackets to indicate that I'm receiving an array of olives and I'll name the array, Olives.
Now within the method, I'll loop through the array. I'll type for and press Ctrl+Space. I'll choose the for each syntax and I'm saying for each olive in the olives array do something. And once again just like I'm doing in the main application right now, I'll call olive.crush. I'll save those changes; I'll go back to the main application class and change it so that it's now going to crush a whole bunch of olives. I'll go back to main.java and I'm going to take out this code. I don't need that anymore and I'm going to declare an array of olives.
Once again, I'll press Ctrl+Space and choose olive, I already have my import statement at the top so I don't need re-declare it. I'll declare this as an array and name it olives, and then I'll use the syntax to initialize the array with values. I'll start with a brace and then newOlive(), newOlive(), and newOlive(). So I am creating three anonymous objects. I am not assigning variable names to them; I'm just creating them and passing them into the array, and then immediately assigning the entire array to the olives array.
Next, I'll create an instance of the OlivePress. I'll type in OlivePress, I'll press Ctrl+ Space that adds an import statement for that class, I'll name it press and I'll instantiate it, once again using the constructor method that the Java compiler adds for me, and finally, I'll call press.getOil and I'll pass in the olives array. I'll make sure to add the semicolon at the end of the line and I'll run the application and because I created three olives in the array, I get the word, ouch, three times.
So this is how instance methods work. Don't put in the static keyword and it becomes an instance method that's called from an instance of the class rather than from the class definition. Once you know how to create and use instance methods, you are on your way to creating full-blown objects that incorporate both methods that is functionality and data.
Get unlimited access to all courses for just $25/month.Become a member
61 Video lessons · 96875 Viewers
56 Video lessons · 110571 Viewers
71 Video lessons · 79404 Viewers
131 Video lessons · 38092 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.