1.static
1.1静态成员变量
java中被static修饰的变量被称为静态成员变量
当我们的变量被static修饰以后
我们的变量就不在存储到对象里面,而是存放在方法区里面
这也就意味着静态成员是不属于某一个对象的,而是大家所共享的
静态成员的生命周期是随着在类里面创建所诞生的,随着类的销毁所销毁的
1.2静态方法
同样的我们的static也可以用来修饰方法,这样的方法被称为静态方法
我们在静态方法里面所使用的变量只能是静态成员变量
如果使用了非静态成员变量那么系统就会报错,如图
我们不管在调用静态成员变量还是静态方法
最好都是使用 类名.**** 的方式来调用,因为这两者都是属于类的,而不是属于某一个变量的
2.代码块
代码块的定义方式是 { } 内直接写代码,代码块的作用是在类里面给成员变量进行赋值
这又分为静态代码块和实例代码块
这两者的区别就是一个给成员变量赋值,一个给静态成员变量赋值
2.1静态代码块
静态代码块是给静态成员变量赋值的,定义方法如下
static{
a = 10;
b = 20;
}
在java里面无论在main函数里面开辟多少个新的对象
静态代码块只会调用一次,这也就意味着静态代码块是类的属性
在JVM加载类的时候就给静态代码块开辟了一块空间
我们可以用代码来演示
public class Test {
public static String name;
static{
System.out.println("静态代码块");
}
}
class Student {
public static void main(String[] args) {
Test.name = "kom";
}
}
最后的运行结果如下
可以看到我们调用了类里面的成员却能打印出来静态代码块
充分说明静态代码块是类的属性
2.2实例代码块
实例代码块是给成员变量进行赋值的,定义方法如下
{
a = 10;
b = 20;
}
实例代码块在创建新的对象时才会被执行
关于他们的执行顺序我们可以用代码来演示一遍
class Student{
Student(){
System.out.println("这是构造方法");
}
{
System.out.println("这是实例代码块");
}
static{
System.out.println("这是静态代码块");
}
}
public class Test {
public static void main(String[] args) {
Student student = new Student();
}
}
最后的运行结果如下
这可以充分说明代码块和构造方法的执行顺序