I saw this line of code in TeaTimer: private final String TAG = getClass().getSimpleName(); instead of the usual private static final String TAG = "FooActivity"; This has the advantage of loading the class name instead of hardcoding it, but adds great runtime complexity --- every instantiation of the class requires more work and allocation, instead of a constant string that is stored once and pointed to at compile time. A different class in the project has private static final String TAG = TimerPrefActivity.class.getSimpleName(); which only has the extra cost of class initialization and of not being a compile-time constant. If the field were protected, then inheritance could kick in and let TAG be initialized with the name of the child class, but no one wants a field as part of the API. In a language like Ruby, you could inject the logging methods into every class and automatically use the class name for the tag. I'm chalking up the TAG convention as another idiosyncrasy of Java.