Java 静态 – 变量,方法,块,类和导入语句
原文: https://howtodoinjava.com/java/basics/java-static-keyword/
Java 中的static
关键字可以应用于变量,方法,块,导入和内部类。 在本教程中,我们将通过示例学习在这些地方使用static
关键字的效果。
Table of Contents
1\. Static Variable
2\. Static Method
3\. Static Import Statement
4\. Static Block
5\. Static Class
6\. Summary
1. 静态变量
要语句静态变量,请在变量语句中使用static
关键字。 静态变量语法为:
ACCESS_MODIFER static DATA_TYPE VARNAME;
例如,以这种方式语句Integer
类型的公共静态变量。
public static Integer staticVar;
关于静态变量的最重要的事情是它们属于类级别。 这意味着在运行时中只能有变量的一个副本。
在类定义中定义静态变量时,类的每个实例都可以访问该单个副本。 类的单独实例不会像非静态变量一样拥有自己的本地副本。
public class JavaStaticExample
{
public static void main(String[] args)
{
DataObject objOne = new DataObject();
objOne.staticVar = 10;
objOne.nonStaticVar = 20;
DataObject objTwo = new DataObject();
System.out.println(objTwo.staticVar); //10
System.out.println(objTwo.nonStaticVar); //null
DataObject.staticVar = 30; //Direct Access
System.out.println(objOne.staticVar); //30
System.out.println(objTwo.staticVar); //30
}
}
class DataObject {
public static Integer staticVar;
public Integer nonStaticVar;
}
Output:
10
null
30
30
注意我们如何将值更改为 30,并且两个对象现在都看到更新后的值 30。
您应该已经注意到的另一件事是,我们如何能够使用其类名即DataObject.staticVar
访问静态变量。 我们无需创建任何实例即可访问static
变量。 它清楚地表明静态变量属于类范围。
2. 静态方法
要语句静态方法,请在方法语句中使用static
关键字。 静态方法语法为:
ACCESS_MODIFER static RETURN_TYPE METHOD_NAME;
例如,以这种方式声明了一个Integer
类型的公共静态变量。
public static Integer staticVar;
public static Integer getStaticVar(){
return staticVar;
}
几件事要记住。
- 您只能访问静态方法中的静态变量。 如果您尝试访问任何非静态变量,则会生成编译器错误,并显示消息“无法对非静态字段
nonStaticVar
进行静态引用”。 - 静态方法可以通过其类引用进行访问,而无需创建类的实例。 尽管您也可以使用实例引用进行访问,但是与通过类引用进行访问相比,它没有任何区别。
- 静态方法也属于类级别范围。
public class JavaStaticExample
{
public static void main(String[] args)
{
DataObject.staticVar = 30; //Direct Access
Integer value1 = DataObject.getStaticVar(); //access with class reference
DataObject objOne = new DataObject();
Integer value2 = objOne.getStaticVar(); //access with instance reference
System.out.println(value1);
System.out.println(value2);
}
}
class DataObject
{
public Integer nonStaticVar;
public static Integer staticVar; //static variable
public static Integer getStaticVar(){
return staticVar;
}
}
Output:
30
30
3. 静态导入语句
普通的导入语句从包中导入类,因此可以在不引用包的情况下使用它们。 同样,静态导入语句从类导入静态成员,并允许在没有类引用的情况下使用它们。
静态导入语句也有两种形式:单静态导入和静态按需导入。 单静态导入语句从类型中导入一个静态成员。 静态按需导入语句将导入类型的所有静态成员。
//Single-static-import declaration:
import static <<package name>>.<<type name>>.<<static member name>>;
//Static-import-on-demand declaration:
import static <<package name>>.<<type name>>.*;
例如,System.out
是
//Static import statement
import static java.lang.System.out;
public class JavaStaticExample
{
public static void main(String[] args)
{
DataObject.staticVar = 30;
out.println(DataObject.staticVar); //Static import statement example
}
}
class DataObject
{
public static Integer staticVar; //static variable
}
Output:
30
阅读更多: Java 中的静态导入语句
4. 静态块
静态块是类初始化代码的一部分,并用static
关键字包装。
public class Main {
//static initializer
static {
System.out.println("Inside static initializer");
}
}
当将类加载到内存中时,将执行静态块。 一个类可以具有多个静态块,并且这些静态块将按照它们在类定义中出现的相同顺序执行。
import static java.lang.System.out;
class DataObject
{
public Integer nonStaticVar;
public static Integer staticVar; //static variable
//It will be executed first
static {
staticVar = 40;
//nonStaticVar = 20; //Not possible to access non-static members
}
//It will be executed second
static {
out.println(staticVar);
}
}
Output:
40
5. 静态类
在 Java 中,可以将静态类作为内部类。 就像其他静态成员一样,嵌套类也属于类范围,因此可以在没有外部类对象的情况下访问内部静态类。
public class JavaStaticExample
{
public static void main(String[] args)
{
//Static inner class example
System.out.println( DataObject.StaticInnerClas.innerStaticVar );
}
}
class DataObject
{
public Integer nonStaticVar;
public static Integer staticVar; //static variable
static class StaticInnerClas {
Integer innerNonStaticVar = 60;
static Integer innerStaticVar = 70; //static variable inside inner class
}
}
请注意,静态内部类无法访问外部类的非静态成员。 它只能访问外部类的静态成员。
public class JavaStaticExample
{
public static void main(String[] args)
{
//Static inner class example
DataObject.StaticInnerClas.accessOuterClass();
}
}
class DataObject
{
public Integer nonStaticVar;
public static Integer staticVar; //static variable
static {
staticVar = 40;
//nonStaticVar = 20; //Not possible to access non-static members
}
public static Integer getStaticVar(){
return staticVar;
}
static class StaticInnerClas
{
public static void accessOuterClass()
{
System.out.println(DataObject.staticVar); //static variable of outer class
System.out.println(DataObject.getStaticVar()); //static method of outer class
}
}
}
Output:
40
6. 总结
让我们总结一下有关 Java 中static keyword
使用情况的所有信息。
- 静态成员属于类。 无需创建类实例即可访问静态成员。
- 静态成员(变量和方法)只能在静态方法和静态块内访问。
- 非静态成员不能在静态方法,块和内部类中访问。
- 一个类可以有多个静态块,并且将按照它们在类定义中出现的顺序执行它们。
- 一个类只有在外部类内部语句为内部类时才能是静态的。
- 静态导入可用于从类中导入所有静态成员。 可以在没有任何类引用的情况下引用这些成员。
学习愉快!
参考文献: