通过一个简单的示例验证静态初始化块、初始化块、构造函数执行先后顺序,成员变量和局部变量的区别以及优先级
1、创建people类
package com.test;
public class People {
String sex;// 性别
float height;// 身高
float weight;// 体重
{
System.out.println("哇,初始化块被执行了!");
}
static{
System.out.println("哇,静态初始化块被执行了!");
}
public People(String sex,float height,float weight){
this.sex = sex;
this.height = height;
this.weight = weight;
System.out.println("构造函数被执行了!");
}
static void sleep(){
System.out.println("哇,静态方法被执行了!我要睡觉了!");
}
void codding(){
System.out.println("程序员每天都在敲代码!");
}
void eat(){
System.out.println("不吃饭会饿死!");
}
void getPeople(){
System.out.println("定义局部变量之前:sex:"+sex+"height:"+height+"wight:"+weight);
String sex = "女";
float height = 180.5f;
float weight = 66.3f;
System.out.println("定义局部变量之后:sex:"+sex+"height:"+height+"wight:"+weight);
}
}
2、创建测试类,测试执行顺序
package com.test;
public class PeopleTest {
public static void main(String[] args){
People people = new People("男",175,65);
people.codding();
people.eat();
people.getPeople();
People.sleep();
}
}
3、控制台输出结果如下:
哇,静态初始化块被执行了!
哇,初始化块被执行了!
构造函数被执行了!
程序员每天都在敲代码!
不吃饭会饿死!
定义局部变量之前:sex:男height:175.0wight:65.0
定义局部变量之后:sex:女height:180.5wight:66.3
哇,静态方法被执行了!我要睡觉了!
4、结论
静态初始化块>初始化块>构造函数;
成员变量和局部变量区别
(1)定义成员变量时可以不赋初值(String 默认为null,int默认为0,float默认为0.0f其他的可以自行测试),定义局部变量时必须进行初始化;
(2)作用域不同,成员变量对整个类生效,局部变量只在定义它的方法内部生效;