You still get homoiconicity from the syntax which is nice since you can easily transform data into code into data into code into data... At build time.
Metaprogramming in C or Java is not fun. It's either code generation integrated with the build system, preprocessor (yuck), annotations processors or runtime weaving. Which all suck at different levels.