First of all, make sure you're using regular ascii quotes like " and ' (ascii codes 0x22 and 0x27, respectively) in shell scripts, because the example in your post contains non-standard quote characters. If you look closely, they look a bit different. Most probably this is a copy-paste error from a rich text document format like Word, OOWriter, or even a browser window.
Since you're on a Mac, you most probably have the FreeBSD implementation of sed, in which case you have to write the command this way:
find . -name "*.java" -exec sed -i '' "s/foo/bar/g" {} +
(here using + instead of \; to avoid running one sed invocation per file).
Note that those quotes around "s/foo/bar/g" are necessary if foo or bar have spaces.
In the FreeBSD implementation of sed the -i flag needs an argument: the extension of a backup file. For example with -i .bak the command would backup file1.txt as file1.txt.bak first before performing the replacement in the original file. Using an empty argument '' means to not use a backup file, which seems to be what you want.
The same thing in the GNU (or NetBSD, OpenBSD, busybox) implementation would be:
find . -name "*.java" -exec sed -i "s/foo/bar/g" {} +
Thank you @bahamat and @Mikel and @pieter-breed for improving my answer with your comments.
-execand everything after it? Does it print the names of the Java files? (I'm worried that you're using smart quotes instead of ASCII quotes.) – Mikel Apr 18 '12 at 19:05"and', respectively. – Lev Levitsky Apr 18 '12 at 19:07find . -name "*.java" -exec sed -i 's/foo/bar/g' {} \;work for you? (copy and paste it to the terminal). If so, I think Mikel could post it as an answer. – Lev Levitsky Apr 18 '12 at 20:23