Modifiers, who, what, why, when?

Modifiers are flags that are set on different attributes, objects etc. within a program to control certain things like access and other functionality.

There are two types of modifiers;

  1. Access – modifiers are used to set the access level for classes, attributes, methods and constructors. What that means is it will set who/what and how it can be accessed. Note when I say who I am referring to an object, maybe a service etc.
  2. Non-access – modifiers that do not control aceess levels but provide other functionality to the code, more detail below.

Note – The below types of modifiers refer to the Java language specifically so your mileage may vary with other languages!

Access Modifiers

Classes:

  • Public – class is accessible by any other class
  • Default – class only accessible by classes in the same package, used when you don’t specify a different modifier, i.e. default

Attributes, methods & constructors:

  • Public – code is accessible to all classes
  • Private – only accessible within the declared class
  • Default – code only accessible in the same package
  • Protected – accessible in the same package and subclasses

Non-Access Modifiers

Classes:

  • Final – class cannot be inherited by other classes
  • Abstract – class cannot be used to create objects. To access it must be inherited from another class

Attributes and methods:

  • Final – attributed and methods cannot be overriden/modified
  • Static – belong to the class rather than the object, means it is loaded up and accessible to the whole JVM
  • Abstract – can only be used in an abstract class and can only be used on methods. Method does not have a body for example abstract void runCode(); – the body is provided by the subclass (which it inheritied from)
  • Transient – attributes and methods are skipped when serializing the object contianing them
  • Synchronized – methods can only be accessible by one thread at a time
  • Volatile – an attribute is not cached thread-locally and is always read from the “main memory”

As you will have read there is many modifiers than can be utlisied and should be for that fact too! I have never come acroess the “Volatile” modifier at all in actual code but looking forward to the day I do!