前言
我们已经掌握了在类中可以包含属性和方法了。基于前面我们掌握的相关知识点,我们今天来了解一个新的知识点:静态static。
在Java中,static是一个关键字,可以用于修饰成员变量和方法,表明这个属性或者方法为静态变量或者静态方法。
被static修饰的成员变量和方法可以称之为类所有,怎么理解呢?就是说静态变量和静态方法属于类本身,而不再是属于类的实例化对象。调用的时候也只需要通过类名即可调用,我们知道普通的属性和方法需要通过new出来的对象去调用,但是静态变量和方法不用。
静态变量在类被加载到JVM时初始化。
正文
static语法
通过static关键字去修饰成员变量和方法,样例代码如下:
public class StatciDemo {
//声明一个静态变量
public static String name = "demo";
//声明一个静态方法
public static void echo(){
System.out.println("这是一个静态方法");
}
}
在前言中我们提到了静态变量和静态方法的调用不在通过实例对象去调用,下面我们看下怎么调用静态变量和静态方法:
public class MainDemo {
public static void main(String[] args) {
//获取StatciDemo中的静态变量name,然后打印一下内容
String name = StatciDemo.name;
System.out.println(name);
//调用一下StatciDemo中的静态方法echo()
StatciDemo.echo();
}
}
我们可以看到调用静态变量和静态方法可以直接通过:类名.变量名 或者 类名.方法()
构造代码块
在前面我们学习类和对象的时候我们学习了构造函数,我们知道构造函数的作用是在实例化的时候给类中的属性进行赋初始值的。
那跟构造方法有关系的一个知识点叫做:构造代码块。
我们现在就来学习一下构造代码块。
说明
构造代码块(也称为初始化块)在每次创建对象时执行,且在构造方法之前执行。
语法
public class MyClass {
{
// 构造代码块
System.out.println("构造代码块执行");
}
MyClass() {
System.out.println("无参构造方法");
}
MyClass(int var) {
System.out.println("有参构造方法");
}
public static void main(String[] args) {
//创建对象
MyClass myClass = new MyClass();
}
}
//输出:
构造代码块执行
无参构造方法
注意
构造代码块也是在创建对象的时候会执行,并且会在构造函数执行前执行构造代码块。
静态代码块
我们在上面学习了静态方法,也学习了构造代码块,那这里跟这些知识点相关的还有一个知识点叫做:静态代码块。
说明
静态代码块在类加载时执行,且只执行一次。它通常用于初始化静态变量或执行只需执行一次的静态初始化操作。静态代码块在类的任何静态成员(包括静态变量和静态方法)被访问之前执行。
语法
public class MyClass {
static {
System.out.println("静态代码块执行");
}
}
总结
- 静态变量:属于类,所有实例共享,通过类名访问。
- 静态方法:属于类,可通过类名直接调用,在静态方法中不能访问非静态成员,最直观的是我们可以看到在main函数中不能访问其他的非静态成员。
- 构造方法:用于初始化对象的时候自动执行。
- 静态代码块:在类加载时执行一次,在类的静态方法和静态变量被加载前被执行。
- 构造代码块:在每次创建对象时执行,且在构造方法之前执行,用于实例初始化。
所以加载顺序是:静态代码块 > 静态方法 > 构造代码块 > 构造方法