static之静态与非静态的方法和成员关系:
1.静态方法可以直接调用该类的静态变量,但是不可以调用非静态成员。
image.png
-如果要调用,只能在这个方法中实例化一个对象,然后调用这个实例的非静态成员。
image.png
同理,静态方法调用非静态方法也是,也要实例化一个对象来调用。
image.png
2.普通方法,即非静态方法,可以访问该类的非静态和静态的变量和方法。
image.png
static之(静态)初始化块:
1.静态代码块:只能调用静态成员和方法。
// 静态初始化块
static {
System.out.println("通过静态初始化块初始化age");
age = 20;
}
2.普通初始代码块:任何成员和方法都可以赋值,调用。
// 初始化块
{
System.out.println("通过初始化块初始化sex");
sex = "男"; //普通成员
age = 20; //静态成员
}
demo:
public class HelloWorld {
String name; // 声明变量name
String sex; // 声明变量sex
static int age;// 声明静态变量age
// 构造方法
public HelloWorld() {
System.out.println("通过构造方法初始化name");
name = "tom";
}
// 初始化块
{
System.out.println("通过初始化块初始化sex");
sex = "男"; //普通成员
age = 20; //静态成员
}
// 静态初始化块
static {
System.out.println("通过静态初始化块初始化age");
//age = 20;
}
public void show() {
System.out.println("姓名:" + name + ",性别:" + sex + ",年龄:" + age);
}
public static void main(String[] args) {
// 创建对象
HelloWorld hello = new HelloWorld();
// 调用对象的show方法
hello.show();
}
}
结果:
运行成功
通过静态初始化块初始化age
通过初始化块初始化sex
通过构造方法初始化name
姓名:tom,性别:男,年龄:20