Annotations in Java provide metadata that can be used by compilers and runtime environments to process code in different ways. Common built-in annotations include @Override, @SuppressWarnings, and @Deprecated. User-defined annotations can also be created. Annotations do not affect code execution but provide supplemental information used by tools and libraries. Common annotation types are marker, single-value, multi-value, type, and repeating annotations. Annotations can be used to provide instructions to compilers, for compile-time processing, and at runtime via reflection.