Static keyword in java:
- The static keyword is used for better memory management and it can be accessed directly through the class without instantiation.
- The static keyword belongs to the class, not to the instance of the class.
- Static keyword with variables, methods, blocks, nested classes.
Static use cases:
- Static variables (static variables) : then that variable is called a static variable, or a static variable.
- Static methods (static methods) : then that method is called static method.
- Static blocks (static blocks) : used to initialize static data members.
- Static class (static class) :
- A class can be made static only if it is a nested class.
- A nested static class can be accessed without an object of the outer class.
- Import static : allows to import static members (static members) of a class or package into another class and then use them as members of that class.
1. Static variables (static variables) in Java:
- Static variable can be used as a common property, to share data for all objects (or instances) of that class and that helps the program save more memory.
1 2 | <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> PI <span class="token operator">=</span> <span class="token number">3.14</span> <span class="token punctuation">;</span> |
2. Static methods (static methods):
Some features:
- A static method belongs to the class, not the object of the class.
- A static method can be called without instantiating a class.
- A static method can access a static variable and can change its value.
- A static method can only call another static method, not a non-static method.
- A static method cannot use the this and super keywords.
- Users cannot override static methods in Java.
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UsingStaticExample</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">changeWebsite</span> <span class="token punctuation">(</span> <span class="token class-name">String</span> website <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token class-name">MyWebsite</span> <span class="token punctuation">.</span> WEBSITE <span class="token operator">=</span> website <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span> <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">UsingStaticExample</span> <span class="token punctuation">.</span> <span class="token function">changeWebsite</span> <span class="token punctuation">(</span> <span class="token string">"https://gpcoder.com"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> ex1 <span class="token punctuation">.</span> <span class="token function">print</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
3. Static blocks (static blocks):
- The static block is used to initialize or change the value of static variables.
- It is executed before the main method at class load time.
- A class can have multiple static blocks .
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 | <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UsingStaticExample</span> <span class="token punctuation">{</span> <span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token class-name">String</span> subject <span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">ArrayList</span> <span class="token generics"><span class="token punctuation"><</span> <span class="token class-name">Fruit</span> <span class="token punctuation">></span></span> fruits <span class="token punctuation">;</span> <span class="token keyword">static</span> <span class="token punctuation">{</span> fruits <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span> <span class="token generics"><span class="token punctuation"><</span> <span class="token class-name">Fruit</span> <span class="token punctuation">></span></span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> fruits <span class="token punctuation">.</span> <span class="token function">add</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">Fruit</span> <span class="token punctuation">(</span> <span class="token string">"Apple"</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> fruits <span class="token punctuation">.</span> <span class="token function">add</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">Fruit</span> <span class="token punctuation">(</span> <span class="token string">"Guava"</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">static</span> <span class="token punctuation">{</span> <span class="token class-name">System</span> <span class="token punctuation">.</span> out <span class="token punctuation">.</span> <span class="token function">println</span> <span class="token punctuation">(</span> <span class="token string">"Khối static được gọi"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">static</span> <span class="token punctuation">{</span> subject <span class="token operator">=</span> <span class="token string">"Khối static (static blocks)"</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token class-name">UsingStaticExample</span> <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> <span class="token function">println</span> <span class="token punctuation">(</span> <span class="token string">"hàm main() được gọi"</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> <span class="token function">println</span> <span class="token punctuation">(</span> <span class="token string">"Subject = "</span> <span class="token operator">+</span> subject <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span> <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">UsingStaticExample</span> ex1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">UsingStaticExample</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
4. Static class (static class):
- A class can be made static only if it is a nested class.
- A nested static class can be accessed without an object of the outer class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UsingStaticExample</span> <span class="token punctuation">{</span> <span class="token keyword">private</span> <span class="token class-name">String</span> subject <span class="token punctuation">;</span> <span class="token class-name">UsingStaticExample</span> <span class="token punctuation">(</span> <span class="token class-name">String</span> subject <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> subject <span class="token operator">=</span> subject <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// nested static class</span> <span class="token keyword">static</span> <span class="token keyword">class</span> <span class="token class-name">MyWebsite</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token class-name">String</span> WEBSITE <span class="token operator">=</span> <span class="token string">"gpcoder.com"</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">print</span> <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> <span class="token function">println</span> <span class="token punctuation">(</span> <span class="token string">"Subject = "</span> <span class="token operator">+</span> subject <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> <span class="token function">println</span> <span class="token punctuation">(</span> <span class="token string">"Website = "</span> <span class="token operator">+</span> <span class="token class-name">MyWebsite</span> <span class="token punctuation">.</span> WEBSITE <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span> <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">UsingStaticExample</span> ex1 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">UsingStaticExample</span> <span class="token punctuation">(</span> <span class="token string">"Core Java"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> ex1 <span class="token punctuation">.</span> <span class="token function">print</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
5. Import static in Java:
- Java allows importing static members of a class or package into another class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <span class="token keyword">public</span> <span class="token keyword">final</span> <span class="token keyword">class</span> <span class="token class-name">SystemConfig</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token class-name">String</span> USER_NAME <span class="token operator">=</span> <span class="token string">"hoangtien2k3"</span> <span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token class-name">String</span> PASSWORD <span class="token operator">=</span> <span class="token string">"12345"</span> <span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token class-name">String</span> EMAIL <span class="token operator">=</span> <span class="token string">"hoangtien2k3qx1@gmail.com"</span> <span class="token punctuation">;</span> <span class="token keyword">private</span> <span class="token class-name">SystemConfig</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">StaticImportDemo</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span> <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">System</span> <span class="token punctuation">.</span> out <span class="token punctuation">.</span> <span class="token function">println</span> <span class="token punctuation">(</span> <span class="token string">"Username: "</span> <span class="token operator">+</span> USER_NAME <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> <span class="token function">println</span> <span class="token punctuation">(</span> <span class="token string">"Password: "</span> <span class="token operator">+</span> PASSWORD <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> <span class="token function">println</span> <span class="token punctuation">(</span> <span class="token string">"Email: "</span> <span class="token operator">+</span> EMAIL <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
References:
https://github.com/hoangtien2k3qx1/java/tree/main/src/java/Static