Statically detect invalid array accesses in Java programs using abstract interpretation