Over a million developers have joined DZone.

Static Members in Inner Classes? The Answer

DZone's Guide to

Static Members in Inner Classes? The Answer

· Java Zone
Free Resource

Bitbucket is for the code that takes us to Mars, decodes the human genome, or drives your next car. What will your code do? Get started with Bitbucket today, it's free.

I asked a question a few days ago, regarding static members in inner classes. I presented an example with two static members, one was integer the other Object type, the integer compiled correctly and the Object did not. Here's how it looks like in the IDE:

Java Riddle

The answer is found in the Java Language Specification 3rd Edition, Section 8.1.3:

Inner classes may not declare static members, unless they are compile-time constant fields

That's the answer. The integer is a compile-time constant which is in-lined by the compiler. The Object is not. Here are some more examples:


By the way, if the class was a static nested class, rather than an inner-class, there wouldn't be any problem defining static members. Plus, constants are inherited when using extensions. This means that the following is legit:


IMHO, Java is not a complex language. It is much simpler than C++, for sure. However, it does have some odd edges.

Bitbucket is the Git solution for professional teams who code with a purpose, not just as a hobby. Get started today, it's free.


Opinions expressed by DZone contributors are their own.


Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.


{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}