There are four access specifiers in Java that control access to class members: public, private, protected, and default. The access specifiers determine whether a class member can be accessed by code in the same class, a subclass in the same package, a non-subclass in the same package, a subclass in another package, or a non-subclass in another package. Each access specifier has a different scope of accessibility based on these relationship levels between the code and class.