Money is a Value Object and is thus immutable. It helps to have a variety of constructors to make it easy to make monies. Constructors that convert from basic numeric types are always useful. For addition and subtraction I'm not trying to do any fancy conversion. Notice that I'm using a special constructor with a marker argument.
Multiplication is very straightforward.
But division is not, as we have to take care of errant pennies. We'll do that by returning an array of monies, such that the sum of the array is equal to the original amount, and the original amount is distributed fairly between the elements of the array. Fairly in this sense means those at the begriming get the extra pennies. Next we'll look at comparing monies, in Java the approach is to implement comparable. That makes methods that need the comparison much easier to read.