  Java remains one of the most popular programming languages in education.
Although Java programming education is well supported by study materials,
learners also need more immediate support on the problems they face in their
own code. When this support cannot be offered by educators personally, learners
can resort to automated program analysis tools such as linters, which provide
feedback on potential bugs or code issues. This is constructive feedback, but
it may nevertheless feel like criticism. This paper introduces code perfumes
for Java, a simple program analysis technique similar to linting, but
commending the correct application of good programming practices. We present a
catalogue of 20 Java code perfumes related to common Java language constructs
for beginner to immediate learners. Our evaluation shows that these code
perfumes occur frequently in learners' code, and programs with more code
perfume instances tend to have better functionality and readability. Moreover,
students who incorporate more code perfumes tend to achieve higher grades.
Thus, code perfumes serve as a valuable tool to acknowledge learners'
successes, and as a means to inform instructors about their learners' progress.
