doNothing() is a method invocation, not an expression. As you quoted, an expression is a construct made up of variables, operators, AND method invocations... that evaluates to a single value. It would be the same as asking if a word, or a phrase is a sentence.
Consider the Map#put(K,V) method. The invocation of this method by itself, even when it returns a value, does not represent an expression in itself.
1 Map<String, Integer> numbers = new HashMap<>();
2 Integer oldVal = numbers.put("one", 1); // not an expression
3 boolean notNull = oldVal != null); // an expression
The main reason why the code on line 2 is not an expression is because no evaluation is being done. Line 2 is a simple method invocation, even though it returns a value. In contrast, line 3 is an expression because an evaluation is being done (the comparison of the notNull variable against null.
1 int value1 = 1 + 2; // an expression
2 int value2 = 5 * 2; // an expression
3 if (value1 == value2) {...} // an expression
In the above snippet, all 3 lines contain an expression. The obvious is line 3 (value1 == value2). The other two are mathematical expressions. Why? Because each one is a construct that has two operands, and an operator.
Going back to the method doNothing(), the invocation of this method cannot be used to construct an expression because it doesn't return a value. Therefore, it cannot be used to build an evaluation.
I hope this helps clarify what an expression is.