This is probably just pure pedantry, but the JVM specification says (section 5.4.1): "A class or interface must be successfully verified before it is initialized." However, some verification failures - such as out-of-range targets of branches in a tableswitch - are reported by cacao only after class initialization is complete. Indeed, sometimes after some methods in the class have already been executed. I don't know if this matters "in the real world". I just noticed the discrepancy and I thought I'd point it out, just in case it turned out to be important.