Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
Complete applications in Java typically consist of more than one class. You'll have a starting class that has the main method for a console application, but then you have all sorts of supporting classes that either encapsulates data or functionality or both. For this exercise, I'll show you a simple strategy for taking an application where all the code is in a single class or a single file and extracting it out to multiple files, so it's easier to keep track of and maintain. I'll start with this beginning Calculator application.
This is a version of the Calculator application that I worked on in a previous chapter of the course. It accepts two numeric values and then asks the user what operation they want to do; addition, subtraction, and so on. Right now, all of the code for the application is in a single file. There is code to get the input and to figure out what to do, but then all of the supporting methods are also in the primary class. In a well-structured Java application, you would extract a lot of this code out to separate classes.
It's up to you as the developer and the application architect to figure out where the code goes and how to group it together. I'll show you a strategy for this application, where I take all of the mathematical operations and group them together into one class and then I'll take the functionality that's accepting input from the command line and put it into another class. The goal will be to create classes that are reusable. I'll start in the CustomClasses project and I'm going to create two new classes. I'll right-click on the default package and choose New>Class.
The first class will be SimpleMath. You could name the class anything you want, but make sure you use an uppercase initial character and that you don't put in any spaces or special characters. This will not be the starting class so don't check the option to create a main method. You'll only be able to call this class from other classes of the application. Click Finish, and you end up with a very simple class structure. The class is public and the name is SimpleMath.
When you declare your own classes, the name of the public class must match the name of the Java file and you can only have one public class in each Java file. It is possible to declare multiple classes in a single Java file, but any other classes can't be public and will only be accessible from within the code in this file. I am going to have just one class in this file and I'm going to put all of my mathematical operation methods into it. So I'll go back to the application, I'll scroll down, and I'll locate my divide, multiply, subtract, and add methods.
I'll select all four of them and I'll cut them to the clipboard. Then I'll go to SimpleMath.java, I'll place the cursor inside the class declaration, and paste in the methods. Now because I'm going to be calling these methods from another class, I can no longer have them marked as private. They must be marked public or I can just remove the access modifier entirely. I like to be explicit in my access modifiers though, so I am going to change private to public on all four methods.
I'll save my changes to this file and go back to the application, and now I'll go to the switch statement where I'm calling those methods. I now have errors telling me that these methods are undefined. I'll fix this by adding the name of the class SimpleMath as a prefix to the call to the method. I'll type Simp and press Ctrl+Space and there is my new class, SimpleMath.
I'll separate the name of the class and the method name with a dot. Notice when I type in the dot, the four available methods are shown automatically and I can easily call them where needed. Now I am going to copy SimpleMath and the dot to the clipboard, and I'll paste that string in to each of the other three method calls. I'll save my changes and I'll run the application, I'll enter a value, I'll enter another value, I'll choose subtraction this time, and everything still works.
So now I've successfully refactored my application. I've extracted the code that's not a part of the main operation and put it in its own separate class. Let's do the same thing with the input function. Once again, I'm going to create a new class, I'll right click and choose New>Class, and I'll call this InputHelper. Once again making sure I don't have the main method selected, I'll click Finish. I'll go back to the main application, I'll scroll down to the bottom and I'll grab this getInput method, make sure you get all of the method including the opening and closing braces, I'll cut that code to the clipboard, I'll go to my new class, place the cursor inside the class declaration, and paste.
Notice that when I paste the code into the new class, Eclipse automatically adds import statements for the BufferedReader and InputStreamReader classes that I need. Just as I did with the methods in the SimpleMath class, I'll change this access modifier from private to public. I'll save my changes to this file and go back to the main application, and I'll go up to the calls to the getInput method. I'll type in input and press Ctrl+ Space and I'll choose my new class, InputHelper and add the dot.
I'll select and copy the InputHelper .string and paste that in twice and I'll save my changes. Down to the bottom, I get a warning, The import java.io is never used. That import statement was handling the classes that deal with input, but because I've moved the usage of those classes into my own separate custom class, I no longer need the import statement. I can either delete it explicitly or I can let Eclipse do it for me.
To do it in Eclipse, hold down the Ctrl and Shift keys on Windows or the Command and Shift keys on Mac and press the letter O, and that is something called organizing imports. That's a great trick, because it will not only get rid of the imports that you don't need, but it will also add or propose the imports that you do need and alphabetize and otherwise organize them for you. I'll save my changes and run the application again and I'll test it again with values of 10, 3 and this time I'll multiply and everything still works.
By organizing your application in smaller classes, it makes it easier to maintain your work over time, and you'll be tempted to tune and refactor your application as you go along. Eclipse will help you with this in many ways. Let's say, for example, that you end up not liking the name of this class SimpleMath, and you think well, I'd like to change the name of that class so that it matches InputHelper, I'd like it really to be named MathHelper. But it would be a real pain to go through and try to search and replace for every occurrence of this class name.
I have it here and I have it four times in the main method. Well, this kind of class renaming is called refactoring and it's incredibly simple in Eclipse. Go to the class in your package Explorer, right click, choose Refactor and then Rename. Assign the new name of the class and I'm going to call it MathHelper. Then click Finish and you'll see that the name of the class is updated in all the calls in the main application, the name of the file is changed, and the name of the class in the class declaration is changed as well.
At the minimum, you can use your custom classes to organize the code, bringing together methods that execute similar operations and moving them out of the main application file that has your main method. How you design the application and how you separate the code is completely up to you, but Java gives you all the tools to do it.
Get unlimited access to all courses for just $25/month.Become a member
61 Video lessons · 104480 Viewers
56 Video lessons · 116396 Viewers
71 Video lessons · 85619 Viewers
131 Video lessons · 40982 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.