文章目录
- 1.前言
- 2.static关键字
- 2.1 static修饰成员变量
- 2.2 static修饰成员方法
- 3. 代码块
- 3.1 普通代码块
- 3.2 静态代码块
- 3.3 构造代码块
- 4.总结
1.前言
本文主要讲解static
关键字以及代码块的执行顺序以及各部分代码块的作用.
2.static关键字
Java中的static
关键字是用来修饰类成员(静态成员)的,可以用来修饰静态变量、静态方法和静态代码块。
2.1 static修饰成员变量
先来看这段代码:
public class Student {
public String id;
public String name;
// static 修饰的成员变量
public static String major = "软件工程";
public Student(String id, String name) {
this.id = id;
this.name = name;
}
}
static修饰成员变量有三个特点:
- 静态成员属于类,而不是属于实例,因此可以通过类名直接访问。
- 静态成员在类被加载时就被初始化,不需要创建类的实例。
- 静态成员被所有实例共享,可以用来存储类级别的信息。
简单来说就是 虽然可以通过实例化的对象来访问 static
修饰的成员变量,但是不推荐这么使用. static
修饰的成员变量也成为类成员. 推荐使用类名.
的方式进行访问. 通过类名.
的方式访问也就说明了static修饰的成员变量在类被加载时就被初始化,不需要创建类的实例. student1和student2都有major 这个成员变量,说明 静态成员被所有实例共享.
小结:使用static
关键字修饰的变量称为静态变量,也叫类变量。静态变量属于类,而不是属于实例。静态变量的值被所有类实例共享,可以通过类名直接访问。可以在类的任何方法中访问静态变量,不需要创建类的实例。
2.2 static修饰成员方法
1.静态方法只能访问静态成员
在图中我们能到看name没有被static修饰,因此在被static修饰的方法func中报错了.
2.静态成员方法只能访问静态的成员方法
由图中可以看到在func中调用func3方法报错了. 因此静态成员方法只能访问静态的成员方法
3.静态成员方法属于类
静态方法属于类,因此也可以通过类名.
的方式进行访问
其实还有一点,静态方法无法重写,不能用来实现多态,这一点会在多态中讲解.
小结: 使用static
关键字修饰的方法称为静态方法,也叫类方法。静态方法属于类,而不是属于实例。静态方法可以直接通过类名访问,不需要创建类的实例。静态方法只能访问静态变量或调用其他静态方法。
3. 代码块
代码块是指一段被大括号包围的代码片段,用于组织代码和限制变量作用域
3.1 普通代码块
普通方法块直接使用{}
定义
示例:
public static void main(String[] args) {
{
int x = 20;
System.out.println(x);
}
int x = 10;
System.out.println(x);
}
// 输出结果:
// 20
// 10
这种用法很少,了解即可
3.2 静态代码块
使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量
public class Student {
public String id;
public String name;
public static String major;
static {
major = "软件工程";
System.out.println("执行了 静态代码块");
}
}
静态代码块不管生成多少个对象,其只会执行一次
3.3 构造代码块
构造块:定义在类中的代码块(不加修饰符)。也叫实例代码块。构造代码块一般用于初始化实例成员变量。
示例:
Student类
public class Student {
public String id;
public String name;
{
this.id = "1";
this.name = "张三";
}
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
'}';
}
}
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.toString());
}
运行结果:
代码块使用时的注意事项:
- 静态代码块不管生成多少个对象,其只会执行一次
- 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次合并
- 实例代码块只有在创建对象时才会执行
来看一下代码块的执行顺序:
public class Demo {
private static int x = 1;
private int y = 2;
static {
System.out.println("静态代码块1,x=" + x);
x = 10;
}
{
System.out.println("实例代码块1,x=" + x + ", y=" + y);
y = 20;
}
public Demo() {
System.out.println("构造函数,x=" + x + ", y=" + y);
y = 30;
}
static {
System.out.println("静态代码块2,x=" + x);
x = 100;
}
{
System.out.println("实例代码块2,x=" + x + ", y=" + y);
y = 40;
}
public static void main(String[] args) {
Demo demo1 = new Demo();
Demo demo2 = new Demo();
}
}
代码块的执行顺序:
- 先执行静态的(加载了类就会执行),且只会执行一次.如果有多个静态代码块,看定义的顺序
- 其次执行实例代码块,有多个时看定义的顺序
- 构造方法执行
4.总结
static
关键字可以用来定义类级别的变量、方法和代码块,通过类名直接访问静态成员变量和静态成员方法. 而代码块的执行顺序以及各部分代码块的作用也很重要.
感谢你的观看!希望这篇文章能帮到你!
专栏: 《从零开始的Java学习之旅》在不断更新中,欢迎订阅!
“愿与君共勉,携手共进!”