不是我打击你,你可能真的不会用Java中的static
2019-09-25 本文已影响0人
淡定_蜗牛
静态可以是:
- 静态变量
- 静态方法
- 静态代码块
我们先来看一下静态变量和静态方法。
什么是Java中的静态变量?
Java中的静态变量是变量,属于类,并且在执行开始时仅初始化一次。
- 它是属于类的变量而不是对象(实例)
- 静态变量仅在执行开始时初始化一次。在初始化任何实例变量之前,将首先初始化这些变量
- 要由类的所有实例共享的单个副本
- 静态变量可以由类名直接访问,不需要任何对象
句法:
<class-name>.<variable-name>
什么是Java中的静态方法?
Java中的静态方法是属于类而不是对象的方法。静态方法只能访问静态数据。
- 它是属于类的方法而不是对象(实例)
- 静态方法只能访问静态数据。它无法访问非静态数据(实例变量)
- 静态方法只能调用其他静态方法,不能从中调用非静态方法。
- 静态方法可以通过类名直接访问,不需要任何对象
- 无论如何,静态方法不能引用“this”或“super”关键字
句法:
<class-name>.<method-name>
注意: main方法是静态的,因为在任何实例化发生之前,应用程序必须可以访问它。
让我们通过做一些练习来了解静态关键词的细微差别!
示例:如何调用静态变量和方法
步骤1)
将以下代码复制到编辑器中
public class Demo {
public static void main(String args[]) {
Student s1 = new Student();
s1.showData();
Student s2 = new Student();
s2.showData();
//Student.b++;
//s1.showData();
}
}
class Student {
int a; //initialized to zero
static int b; //initialized to zero only when class is loaded not for each object created.
Student() {
//Constructor incrementing static variable b
b++;
}
public void showData() {
System.out.println("Value of a = " + a);
System.out.println("Value of b = " + b);
}
//public static void increment(){
// a++;
//}
}
步骤2)保存并编译代码。运行代码为java Demo。
步骤3)
预期输出如下所示
image下图显示了如何创建引用变量和对象,以及不同实例访问静态变量。
image步骤4)可以使用语法ClassName.Variable_Name从类外部访问静态变量。取消注释第7和8行。保存,编译和运行。观察输出。
Value of a = 0
Value of b = 1
Value of a = 0
Value of b = 2
Value of a = 0
Value of b = 3
步骤5)取消注释第25,26和27行。保存,编译和运行。
error: non-static variable a cannot be referenced from a static context a++;
第6步)错误=?这是因为无法从java静态类方法“ increment ” 访问实例变量“ a ”。
Java静态块
静态块是Java类中的语句块,它将在类首次加载到JVM时执行
class Test{
static {
//Code goes here
}
}
一个静态块有助于初始化静态数据成员,就像构造有助于初始化实例成员
以下程序是java静态块的示例。
示例:如何访问静态块
public class Demo {
static int a;
static int b;
static {
a = 10;
b = 20;
}
public static void main(String args[]) {
System.out.println("Value of a = " + a);
System.out.println("Value of b = " + b);
}
}
您将获得该程序的以下输出。
Value of a = 10
Value of b = 20