The responses above are right. Maybe I can offer a bit of additional explanation:
If a class MyClass contains a non-static variable myVar (also known as a field or property), then each instance of a MyClass contains its own instance of the myVar variable. (In other, more rational universes, this would be called an instance variable. It seems quirky to me, to use the word “static” to define a class variable or method. Seems like a word borrowed from C and given a different meaning.)
Now, let:
MyClass period1 = new MyClass() ;
MyClass period2 = new MyClass() ;
Now, call a method within the class, using each of these two instance objects:
int totalCredits = period1.hours() + period2.hours() ;
The method hours() might (and typically would) contain references to instance variables within the class. The two calls to hours() above would each refer to its own instance’s instance of myVar. So how does the code in hours() know which instance is this in each call?
Because, the target object is passed to the method as a (poorly kept secret) parameter. In the call period1.hours(), the object period1 is one of the parameters parameters passed to the function (even it isn’t called a parameter in OO terminology). In a non-OO language, the (near)-equivalent call would be:
int totalCredits = hours(period1) + hours(period2) ;
Now to the point: Instance (non-static) methods, by definition, are intended to be used in this way: To include references to instance variables in each particular this object when they are called. Thus, there absolutely must be a this when the method is called.
The example in the OP might be confusing because it’s a degenerate case: The body of the function does not refer to any instance variable of the class. Therefore, it hypothetically could be called with:
int answer = summate (first, second, third);
Except that it’s defined as an instance (non-static) method. Thus, even though it doesn’t refer to any instance variables, it could. Thus, it must be called with a this object, as in:
int answer = myThisObject.summate (first, second, third);
so that any references to instance variables will have, you know, an instance to work with.
Thus, if a method is intended to not refer to variables of any particular instance, but instead is intended to be used as in the OP example, then the method must be declared as a static (i.e., class) method rather than an instance method.