Access modifiers in Java control the visibility and scope of classes, fields, methods, and constructors. There are four access modifiers: private limits access to the class only; default limits access to the package; protected allows access from subclasses even outside the package; and public allows full access from anywhere. Non-access modifiers include static, abstract, synchronized, native, volatile, and transient which change how a class or member functions but not its accessibility.