Instance & Static
The components that can be present in the code that define a class
in Java
are also divided into two groups just like for JavaScript
and other programming languages that support OOP
:
Instance Members
–property
properties andmethod
methods belong toobject
created fromclass
, also known asinstance
.Static Members
–property
properties andmethod
methods do not belong toinstance
but toobject
representing thatclass
, and are referenced from theclass
name.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <span class="token keyword">class</span> <span class="token class-name">Person</span> <span class="token punctuation">{</span> <span class="token comment">/* Instance Members */</span> <span class="token class-name">String</span> name <span class="token punctuation">;</span> <span class="token keyword">int</span> age <span class="token punctuation">;</span> <span class="token class-name">Person</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> setName <span class="token punctuation">(</span> <span class="token keyword">null</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> setAge <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token class-name">Person</span> <span class="token punctuation">(</span> <span class="token class-name">String</span> $name <span class="token punctuation">,</span> <span class="token keyword">int</span> $age <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> setName <span class="token punctuation">(</span> $name <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> setAge <span class="token punctuation">(</span> $age <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name">Person</span> <span class="token punctuation">.</span> instanceCounter <span class="token operator">+=</span> <span class="token number">1</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">void</span> setName <span class="token punctuation">(</span> <span class="token class-name">String</span> $name <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> $name <span class="token operator">==</span> <span class="token keyword">null</span> <span class="token punctuation">)</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> name <span class="token operator">=</span> <span class="token string">"Anonymous"</span> <span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> name <span class="token operator">=</span> $name <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">void</span> setAge <span class="token punctuation">(</span> <span class="token keyword">int</span> $age <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span> $age <span class="token operator"><</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> age <span class="token operator">=</span> <span class="token number">0</span> <span class="token punctuation">;</span> <span class="token keyword">else</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> age <span class="token operator">=</span> $age <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">void</span> greet <span class="token punctuation">(</span> <span class="token class-name">Person</span> $someone <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">System</span> <span class="token punctuation">.</span> out <span class="token punctuation">.</span> println <span class="token punctuation">(</span> <span class="token string">"Hello, "</span> <span class="token operator">+</span> $someone <span class="token punctuation">.</span> name <span class="token operator">+</span> <span class="token string">"!"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name">System</span> <span class="token punctuation">.</span> out <span class="token punctuation">.</span> println <span class="token punctuation">(</span> <span class="token string">"I'm "</span> <span class="token operator">+</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> name <span class="token operator">+</span> <span class="token string">", "</span> <span class="token operator">+</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> age <span class="token operator">+</span> <span class="token string">" year(s) old."</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">/* Static Members */</span> <span class="token keyword">static</span> <span class="token keyword">int</span> instanceCounter <span class="token punctuation">;</span> <span class="token keyword">static</span> <span class="token punctuation">{</span> <span class="token class-name">Person</span> <span class="token punctuation">.</span> instanceCounter <span class="token operator">=</span> <span class="token number">0</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">static</span> <span class="token keyword">void</span> printCounter <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">System</span> <span class="token punctuation">.</span> out <span class="token punctuation">.</span> println <span class="token punctuation">(</span> <span class="token string">"Person: Created "</span> <span class="token operator">+</span> <span class="token class-name">Person</span> <span class="token punctuation">.</span> instanceCounter <span class="token operator">+</span> <span class="token string">" instance(s)."</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">//. Person</span> |
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token keyword">class</span> <span class="token class-name">ClassMembers</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> main <span class="token punctuation">(</span> <span class="token class-name">String</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> $args <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">Person</span> $me <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Person</span> <span class="token punctuation">(</span> <span class="token string">"Semi Dev"</span> <span class="token punctuation">,</span> <span class="token number">32</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name">Person</span> $someone <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Person</span> <span class="token punctuation">(</span> <span class="token keyword">null</span> <span class="token punctuation">,</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name">Person</span> <span class="token punctuation">.</span> printCounter <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> $me <span class="token punctuation">.</span> greet <span class="token punctuation">(</span> $someone <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">//. ClassMembers</span> |
1 2 3 4 5 6 7 8 | cd learn-java-language && cd class-members javac ClassMembers.java Person.java java ClassMembers Person: Created 2 instance(s). Hello, Anonymous! I'm Semi Dev, 32 year(s) old. |
Overloading Methods
Compared to JavaScript
, Java
‘s class
definition syntax is mostly similar, but there are also a few differences:
- Initializers are methods without the
constructor
keyword. - There can exist different definition versions of the same
method name
method name .
The first difference is probably due to the original language design, JavaScript
‘s constructor
keyword helps initializers to be better marked apart when placed next to the definition code of other methods. Hopefully Java
will update a few of these little features to make it even more perfect.
The second difference is due to Java
‘s type characteristic of static-typing
. Static-styled languages have always tried to support this feature to make it possible for coders to reuse function names. There are many cases when we want to have multiple definition versions of the same function name, because the general function of the function is the same, but for different input parameter sets, there will be different processing logic. little bit. The operation of redefining a function name multiple times with different signature
sets is called overloading methods
.
In the example code above, we have an initializer overload
with an instance with no parameters and an instance with data parameters.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <span class="token comment">// signature: Person ()</span> <span class="token class-name">Person</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> setName <span class="token punctuation">(</span> <span class="token keyword">null</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> setAge <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// signature: Person (String, Int)</span> <span class="token class-name">Person</span> <span class="token punctuation">(</span> <span class="token class-name">String</span> $name <span class="token punctuation">,</span> <span class="token keyword">int</span> $age <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> setName <span class="token punctuation">(</span> $name <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> setAge <span class="token punctuation">(</span> $age <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token class-name">Person</span> <span class="token punctuation">.</span> instanceCounter <span class="token operator">+=</span> <span class="token number">1</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
A signature
set represents a version of method
definition that includes: the return data type, the method name
‘s name, and the input parameters’ data types. Since Java
initializers don’t have names, we are temporarily having the same signature sets as above.