The role and usage of the static keyword in Java is described in detail

Source: Internet
Author: User

Static represents the meaning of "global" or "static", which modifies member variables and member methods, and can also form statically static blocks of code, but there is no concept of global variables in the Java language.

member variables and member methods that are modified by static are independent of any object of the class. That is, it does not depend on class-specific instances and is shared by all instances of the class.

As long as this class is loaded, the Java virtual machine can find them based on the class name in the method area of the run-time data area. Therefore, a static object can be accessed before any of its objects are created, without referencing any objects.

Static member variables and member methods that are decorated with public are essentially global variables and global methods, and when declaring the object city of its class, do not generate a copy of the static variable, but all instances of the class share the same static variable.

The static variable can have a private adornment before it , indicating that the variable can be used in the static code block of the class, or in other static member methods of the class (which can also be used in non-static member methods – nonsense), but cannot be directly referenced in other classes by the class name, which is important . In fact, you need to understand thatprivate is the access permission limit, static means do not instantiate can be used, so it is easier to understand more. Static plus other access keyword effects and so on.

The static modified member variables and member methods are customarily referred to as static variables and static methods, which can be accessed directly through the class name, and Access syntax is:

Class name. static method Name (parameter list ...)

Class name. Static variable Name

A static code block is represented by a statically decorated block of code that executes when the Java Virtual Machine (JVM) loads the class (very useful, hehe).

1. Static variables

There are two ways to classify a class member variable statically: A variable that is statically modified, called a static variable or a class variable, and another variable that is not modified by static, called an instance variable.

The difference between the two is:

For static variables there is only one copy in memory (memory saving), the JVM allocates only one memory at a time, completes the memory allocation of static variables during the loading of the class, can be accessed directly (conveniently) by the class name, and, of course, is accessible through objects (but this is not recommended).

For instance variables, when an instance is not created, the instance variable is allocated one memory, and the instance variable can have multiple copies in memory without compromising (flexibility).

As a result, static variables are typically used when you need to implement the following two functions:

1). When sharing values between objects
2). Easy access to variables

2. Static method

Static methods can be called directly from the class name, and any instance can also be called.

Therefore, the this and Super keywords cannot be used in a static method, and you cannot directly access the instance variables and instance methods of the owning class (that is, member variables and member methods without static), only the static member variables and member methods of the owning class.

Because instance members are associated with specific objects! This need to understand, want to understand the truth, not the memory!!!

Because the static method is independent of any instance, the static method must be implemented, not abstract.

For example, to facilitate the invocation of a method, all methods in the math class in the Java API are static, and the static method inside the generic class is convenient for other classes to call the method.

A static method is a special kind of method inside a class that declares the corresponding method static only when it is needed, and a method inside a class is generally non-static

3. Static code block

A static block of code is also called a code block, which is an independent block of static blocks in a class that is separate from a class member, can have more than one position, it is not in any method body, and the JVM executes these static blocks of code when the class is loaded, and if there are multiple static blocks of code, The JVM executes them sequentially in the order in which they appear in the class, and each code block is executed only once . For example:

The code is as follows:
 Public classTEST5 {Private Static intA; Private intb; Static{test5.a=3;    System.out.println (a); TEST5 T=NewTest5 ();    T.F (); T.B=1000;    System.out.println (T.B); }    Static{test5.a=4;    System.out.println (a); }     Public Static voidMain (string[] args) {//TODO automatically generate method stubs}    Static{test5.a=5;    System.out.println (a); }     Public voidf () {System.out.println ("Hhahhahah"); }    }



Operation Result:

The code is as follows:
31000 4 5


Static code blocks allow you to assign values to some static variables, and finally take a look at these examples, all in a static Main method, so that the JVM can be called directly without creating an instance when it runs the main method.

4. What does static and final piece mean?

Static final is used to modify member variables and member methods, which can be simply understood as "Global Constants"!

For variables, this means that once a value is given it cannot be modified and is accessible through the class name.

For methods, the representation is not overwritten and can be accessed directly through the class name.

Sometimes you want to define a class member so that its use is completely independent of any object of that class. Typically, a class member must be accessed through the object of its class, but it can create a member that can be used by itself without referencing a particular instance. Such a member can be created by adding the keyword static (static) before the member's declaration. If a member is declared static, it is able to be accessed before any object of its class is created, without having to reference any object. You can declare methods and variables as static. The most common example of a static member is main (). Because main () must be called when the program starts executing, it is declared as static.

A variable declared as static is essentially a global variable. When declaring an object, the copy of the static variable is not produced, but all instance variables of the class share the same static variable. The method declared as static has the following limitations:

1). They can only invoke other static methods.
2). They can only access static data.
3). They cannot refer to this or super in any way (the keyword super is related to inheritance, as described in the next chapter).

If you need to initialize your static variable with a calculation, you can declare a static block that executes only once when the class is loaded. The following example shows a class that has a static method, some static variables, and a static initialization block:

The code is as follows:
Demonstrate static Variables,methods,and blocks.

classusestatic {Static intA = 3; Static intb; Static voidMethintx) {System.out.println ("x =" +x); System.out.println ("A =" +a); System.out.println ("B =" +b); }   Static{System.out.println ("Static block initialized."); b= A * 4; }    Public Static voidMain (String args[]) {Meth (42); }    }


Once the Usestatic class is loaded, all static statements are run. First, A is set to 3, then the static block executes (prints a message), and finally, B is initialized to a*4 or 12. Then call Main (), main () call meth () and pass the value 42 to X. The 3 println () statements refer to two static variables A and B, and the local variable x.

Note: Referencing any instance variable in a static method is illegal.

The following is the output of the program:

The code is as follows:
Static block initialized.
x = 42
A = 3
b = 12


Outside of the classes that define them, static methods and variables can be used independently of any object. This way, you can just add the number operator to the name of the class. For example, if you want to invoke a static method from outside the class, you can use the following common format:

The code is as follows:
Classname.method ()


Here, ClassName is the name of the class, and the static method is defined in the class. As you can see, this format is similar to calling a non-static method through an object reference variable. A static variable can be accessed in the same format-the class name dot number operator. This is how Java implements a control version of global functionality and global variables.

Here is an example. In main (), the static method CallMe () and the static variable B are accessed outside their classes.

The code is as follows:
 class   Staticdemo { static  int  a = 42;  static  int  b = 99;  static  void   CallMe () {System.out.println ( "a =" + a); }}  class   Staticbyname { public  static  void   Main (String args[]) {Staticdemo.callme ();    System.out.println ( "b =" + STATICDEMO.B); }    }

The following is the output of the program:

The code is as follows:
A = 42
b = 99


A static member cannot be accessed by an instance created by its class.

If the member without the static adornment is an object member, it is owned by each object.

The members of the static modifier are class members, which can be called directly by a class and are common to all objects.

The role and usage of the static keyword in Java is described in detail

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.